手机版

JavaScript解析和JSON序列化方法示例分析

时间:2021-08-27 来源:互联网 编辑:宝哥软件园 浏览:

本文说明了用JavaScript解析和序列化JSON的方法。分享给大家参考,如下:

JSON之所以如此受欢迎,是因为JSON数据结构可以解析成JavaScript对象。要在JSON之前解析XML数据结构,需要先将其解析成DOM文档,然后从中提取数据。相比之下,JSON的数据结构就方便多了,O(_)O~

因此,JSON已经成为网络开发中数据交换的事实标准。

1 JSON 对象

早期的JSON解析器使用了JavaScript的eval()函数。因为JSON是JavaScript语法的子集,所以eval()函数可以解析并返回JavaScript对象。但是使用这个函数有风险,因为可能会执行一些恶意代码!ECMAScript 5定义了全局对象JSON。支持这个对象的浏览器有IE8、火狐3.5、Safari 4、Chrome和Opera 10.5。然而,JSON-js库被推荐用于较旧的浏览器。

JSON对象有两种方法:

1.stringify(),它将JavaScript对象序列化为JSON字符串。2.parse(),它将把JSON字符串解析成本机JavaScript对象。

脚本类型=' text/JavaScript ' var book={ title : ' music ',author :[' deniro '],edition: 1,year : 2017 };var jsonText=JSON . stringify(book);console . log(JSontext);var bookCopy=JSON . parse(JSontext);console . log(BookCopy);/script默认情况下,JSON.stringify()输出的字符串不包含任何空格字符和缩进。所有函数和原型成员都被有意忽略。此外,具有未定义值的属性也被跳过。因此,结果都是具有有效值的属性。

注意:上面代码中的book和bookCopy虽然属性相同,但却是两个独立的对象,没有任何关系。

如果传递给JSON.parse()的字符串不是有效的JSON字符串,将引发错误。

2 序列化选项

JSON.stringify()还可以接收另外两个参数。第二个参数是过滤器,可以是数组,也可以是函数;第三个参数指示是否在JSON字符串中保留缩进。

2.1 过滤结果

如果过滤器的参数是一个数组,则结果中将只包括该数组中列出的属性:

脚本类型=' text/JavaScript ' var book={ title : ' music ',author :[' deniro '],edition: 1,year : 2017 };//筛选器结果var jsontextafterfilter=JSON . stringfy(book,['title ',' edition ']);console . log(jsonTextAfterFilter);//{'title' :' music ',' edition' :1}/script如果过滤器的参数是一个函数,则该函数将接收两个参数,属性名和属性值。属性名只能是字符串。如果其对应的属性值不是键值对结构的值,则属性名可以是空字符串。此函数的返回值是对应于相应属性名的值。如果函数返回undefined,则忽略相应的属性:

脚本类型=' text/JavaScript ' var book={ title : ' music ',author :[' deniro '],edition: 1,year : 2017 };var jsonText=JSON . stringify(book,function (key,value){ switch(key){ case ' authors ' : return value . join(',');案例'年份' :返回10000;case 'edition':返回未定义;默认值:返回值;} });console . log(JSontext);//{'title' :' music ',' authors' :' de Niro ',' year' :10000}/script注意:必须提供默认选项,以确保其他值可以正常出现在结果中。

火狐3.5和3.6都有bug。当一个函数被用作方法的第二个参数时,只有返回undefined才是有效的,而返回任何其他值都会在结果中包含相应的属性。Firefox 4修复了这个错误。

2.2 字符串缩进

JSON的第三个参数。stringfy()可以控制结果中的缩进和空白。如果此参数是数值,则表示缩进的空格数,例如,这里应该缩进四个空格:

脚本类型=' text/JavaScript ' var book={ title : ' music ',author :[' deniro '],edition: 1,year : 2017 };var jsonText=JSON . stringify(book,null,4);console . log(JSontext);/script使用在线HTML/CSS/JavaScript代码运行工具:http://tools.jb51.net/code/HtmlJsRun对上述代码进行了测试,运行结果如下:

除了缩进,JSON.stringify()还在结果中添加了一个新的行字符,这提高了JSON字符串的可读性。缩进空格的最大数量为10,如果超过该值,将自动转换为10。

如果缩进参数是字符串,它将用作JSON字符串的缩进字符:

脚本类型=' text/JavaScript ' var book={ title : ' music ',author :[' deniro '],edition: 1,year : 2017 };var jsonTextWithIndent=JSON . stringify(book,null,'-');//传入缩进字符console . log(jsonTextWithIndent);/script使用在线HTML/CSS/JavaScript代码运行工具:http://tools.jb51.net/code/HtmlJsRun对上述代码进行了测试,运行结果如下:

缩进字符串的最大长度不能超过10。如果超过该值,结果中将只显示前10个字符。

2.3 toJSON() 方法

有时候JSON.stringify()不能满足一些对象的自定义序列化的要求。此时,我们可以在对象上使用toJSON()方法返回自己的JSON数据格式。

您可以为任何对象添加toJSON()方法:

脚本类型=' text/JavaScript ' var book={ title : ' music ',author :[' deniro '],edition: 1,year: 2017,to JSON : function(){ return this . title;} };var jsonText=JSON . stringify(book);console . log(JSontext);//“music”/脚本可以使toJSON()方法返回任何序列化的值;您也可以返回undefined。如果包含它的对象嵌入到另一个对象中,该对象的值将变为空。如果包含它的对象是顶级对象,那么这个对象是未定义的。

当一个对象传入JSON.stringify()时,序列化该对象的顺序如下:如果有to JSON()方法,并且可以通过它获取有效值,则调用该方法。.如果提供了第二个参数,应用这个函数过滤器,传递到这个过滤器的值就是上一步返回的值。.相应地序列化第二步中返回的每个值。.如果提供了第三个参数,将执行相应的格式化操作。

3 解析选项

JSON.parse()也可以接收第二个参数,这是一个将在每个键值对上调用的函数。这个函数被称为恢复函数,它接收一个键和值,并需要一个返回值。

如果此恢复函数返回undefined,则意味着从结果中删除相应的键;如果返回另一个值,它将被插入到结果中。将日期字符串转换为日期对象时,通常使用此函数:

脚本类型=' text/JavaScript ' var book={ title : ' music ',author :[' deniro '],edition: 1,year: 2017,released Date : new Date(2017,6,2)};var jsonText=JSON . stringify(book);var bookCopy=JSON . parse(jsonText,function (key,value)){ if(key==' release Date '){返回新的Date(value);} else {返回值;} });console . log(book copy . release date . getfullyear());/script感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.jb51.net/code/HtmlJsRun来测试上面代码的运行效果。

PS:这里有一些相关的json在线工具供大家参考:

在线JSON代码检查,检查,美化和格式化工具:http://tools.jb51.net/code/json

JSON在线格式化工具:http://tools.jb51.net/code/jsonformat

在线XML/JSON相互转换工具:http://tools.jb51.net/code/xmljson

Json代码在线格式化/美化/压缩/编辑/转换工具:http://tools.jb51.net/code/jsoncodeformat

在线json压缩/转义工具:http://tools.jb51.net/code/json_yasuo_trans

有关JavaScript的更多信息,请参见本网站的主题:《JavaScript中json操作技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》、《JavaScript数学运算用法总结》和0103010。

希望本文对JavaScript编程有所帮助。

版权声明:JavaScript解析和JSON序列化方法示例分析是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。