Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 185|回复: 0

[默认分类] JSON.stringify 语法讲解

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-5-26 14:58:33 | 显示全部楼层 |阅读模式
    刚刚在逛园子的时候,突然看到了一位园友的文章,里面涉及到一这样一个javascript函数:JSON.stringify。
    原文链接:javascript 进阶篇3 Ajax 、JSON、 Prototype
    认识javascript也不短的时间了,可是这个用法说实在的,我还是第一次见过,惭愧啊惭愧啊。于是乎,在网上找了写资料,写了些例子 希望能给园子们一些帮助。
    作用:这个函数的作用主要是为了系列化对象的。
    可能有些人对系列化这个词过敏,我的理解很简单。就是说把原来是对象的类型转换成字符串类型(或者更确切的说是json类型的)。就这么简单。打个比方说,你有一个类,那么你可以通过这个方法转换成相应的json类型的。很简单吧。
    接着看。
    语法:
    JSON.stringify(value [, replacer] [, space])

    value:是必须要的字段。就是你输入的对象,比如数组啊,类啊等等。
    replacer:这个是可选的。它又分为2种方式,一种是方法,第二种是数组。

    情况一:我们先说数据,通过我们后面的实验可以知道,它是和第一个有关系的。一般来说,我们系列化后的结果是通过键值对来进行表示的。
    比如说:
    name:"lan",age:25
    这种形式。
    所以,如果这种形式的话,如果第二个的值在第一个存在,那么的话就以第二个的值做key,第一个值为value进行表示,如果不存在,sorry,忽略。【是不是有点抽象,我也这么觉得,不过你等一下看实验 就OK了。。呼呼。】
    情况二:如果是方法,那很简单,就是说把系列化后的每一个对象(记住 是每一个)传进方法里面进行处理。

    space:很好理解,用什么来做分隔符的。

    1.如果省略的话,那么显示出来的值 就没有分隔符。直接输出来
    2.如果是一个数字的话,那么它就定义缩进几个字符,当然 如果大于10 ,则最大值为10.
    3.如果是一些转义字符,比如“\t”,表示回车,那么它每行一个回车。
    4.如果仅仅是字符串,OK,就在每行输出值的时候把这些字符串附加上去就OK。当然,最大长度也是10个字符。


    开始用实例说明;
    1.只有一个参数的情况下:

    1.             var student = new Object();
    2.             student.name = "Lanny";
    3.             student.age = "25";
    4.             student.location = "China";
    5.             var json = JSON.stringify(student);
    6.             alert(student);
    复制代码


     结果如下:

    有些人可能会怀疑JSON.stringify的作用,OK。那假如,我们不要这个函数。代码下面的样子:

    1. var student = new Object();
    2.             student.name = "Lanny";
    3.             student.age = "25";
    4.             student.location = "China";
    5.            // var json = JSON.stringify(student);
    6.             alert(student);
    复制代码


     恭喜你 得到的结果是:

    没骗你吧,继续。
      
    2.第二个参数存在,并且第二个参数还是function的时候

    1. var students = new Array() ;
    2.             students[0] = "Lanny";
    3.             students[1] = "dong";
    4.             students[2] = "I love you";
    5.             var json = JSON.stringify(students,switchUpper);
    6.             function switchUpper(key, value) {
    7.                 return value.toString().toUpperCase();
    8.             }
    9.             alert(json);
    复制代码

    1.         //var json = JSON.stringify(students, function (key,value) {                 
    复制代码

    1.         //return value.toString().toUpperCase();            
    复制代码

    1.        //});
    复制代码

    1.       上面的方法也可以换成下面的,2个都是一样,只是写法有那么一点点的不一样而已。
    复制代码


     得到结果如下:

    3.第二个参数存在,并且第二个参数不是function,而是数组的时候。
    3.1 【误区】如果第一个参数是数组,第二个参数也是数组的话,只显示第一个参数的值。
    比如:

    1. var students = new Array() ;
    2.             students[0] = "Lanny";
    3.             students[1] = "dong";
    4.             students[2] = "I love you";
    5.             var stu = new Array();
    6.             stu[0] = "1";
    7.             stu[1] = "2";
    8.             var json = JSON.stringify(students,stu);
    9.             alert(json);
    复制代码


     sorry 得到的结果就是:

    第二个被忽略了,只是第一个被系列化了。
    3.2 如果第一个是对象(这里说的对象就像在C#里面可以进行new的),第二个是数组的。
    那么如果第二个的value在第一个存在,那么的话就以第二个的值做key,第一个值为value进行表示

    1. var student = new Object();
    2.             student.qq = "5485891512";
    3.             student.name = "Lanny";
    4.             student.age = 25;
    5.             var stu = new Array();
    6.             stu[0] = "qq";
    7.             stu[1] = "age";
    8.             stu[2] = "Hi";//这个student对象里不存在。
    9.             var json = JSON.stringify(student,stu);
    10.             alert(json);
    复制代码


     得到的结果如下:

    因为stu[2] = "Hi";这个Hi 在第一个找不到,所以就不进行显示了。
    4.第三个参数
    4.1.如果省略的话,那么显示出来的值 就没有分隔符。直接输出来
    比如:

    1. var student = new Object();
    2.             student.qq = "5485891512";
    3.             student.name = "Lanny";
    4.             student.age = 25;
    5.             var stu = new Array();
    6.             stu[0] = "qq";
    7.             stu[1] = "age";
    8.             stu[2] = "Hi";
    9.             var json = JSON.stringify(student,stu);
    10.             alert(json);
    复制代码


     输出的就是:

    4.2.如果是一个数字的话,那么它就定义缩进几个字符,当然 如果大于10 ,则最大值为10.

    1. var student = new Object();
    2.             student.qq = "5485891512";
    3.             student.name = "Lanny";
    4.             student.age = 25;
    5.             var stu = new Array();
    6.             stu[0] = "qq";
    7.             stu[1] = "age";
    8.             stu[2] = "Hi";
    9.             var json = JSON.stringify(student,stu,100);//注意这里的100
    10.             alert(json);
    复制代码


    那么得到的是:

    空开来了10个字符。
    4.3.如果是一些转义字符,比如“\r”,表示回车,那么它每行一个回车。【谢谢回复的朋友指出了这个错误!】
    也是一样。
    4.4.如果仅仅是字符串,OK,就在每行输出值的时候把这些字符串附加上去就OK。当然,最大长度也是10个字符。
    如果是var json = JSON.stringify(student,stu,“HaiKou”);//

      
    就这样吧 。good night。
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-6-12 09:20 , Processed in 0.569833 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表