浅谈JSON中stringify 函数、toJosn函数和parse函数


Posted in Javascript onJanuary 26, 2015

JSON.stringify 函数 (JavaScript)

语法:JSON.stringify(value [, replacer] [, space])

将 JavaScript 值转换为 JavaScript 对象表示法 (Json) 字符串。

value

必需。 要转换的 JavaScript 值(通常为对象或数组)。

replacer

可选。 用于转换结果的函数或数组。

如果 replacer 为函数,则 JSON.stringify 将调用该函数,并传入每个成员的键和值。 使用返回值而不是原始值。 如果此函数返回 undefined,则排除成员。 根对象的键是一个空字符串:""。

如果 replacer 是一个数组,则仅转换该数组中具有键值的成员。 成员的转换顺序与键在数组中的顺序一样。 当 value 参数也为数组时,将忽略 replacer 数组。

space

可选。 向返回值 JSON 文本添加缩进、空格和换行符以使其更易于读取。

如果省略 space,则将生成返回值文本,而没有任何额外空格。

如果 space 是一个数字,则返回值文本在每个级别缩进指定数目的空格。 如果 space 大于 10,则文本缩进 10 个空格。

如果 space 是一个非空字符串(例如“\t”),则返回值文本在每个级别中缩进字符串中的字符。

如果 space 是长度大于 10 个字符的字符串,则使用前 10 个字符。

如果 value 具有 toJSON 方法,则 JSON.stringify 函数将使用该方法的返回值。 如果 toJSON 方法的返回值为 undefined,则不转换成员。 这使对象能够确定自己的 JSON 表示形式。

将不会转换不具有 JSON 表示形式的值,例如 undefined。 在对象中,将丢弃这些值。 在数组中,会将这些值替换为 null。

执行顺序

在序列化过程中,如果 value 参数对应有 toJSON 方法,则 JSON.stringify 将首先调用 toJSON 方法。 如果该方法不存在,则使用原始值。 接下来,如果提供 replacer 参数,则该值(原始值或 toJSON 返回值)将替换为 replacer 参数的返回值。 最后,根据可选 space 参数向该值添加空格以生成最终的 JSON 文本。

此示例使用 JSON.stringify 将 contact 对象转换为 JSON 文本。 定义 memberfilter 数组以便只转换surname 和 phone 成员。 省略 firstname 成员。

var contact = new Object();

contact.firstname = "Jesper";

contact.surname = "Aaberg";

contact.phone = ["555-0100", "555-0120"];

var memberfilter = new Array();

memberfilter[0] = "surname";

memberfilter[1] = "phone";

var jsonText = JSON.stringify(contact, memberfilter, "\t");

document.write(jsonText);

// Output:

// { "surname": "Aaberg", "phone": [ "555-0100", "555-0120" ] }

toJSON 方法 (Date) (JavaScript)

语法:objectname.toJSON()

objectname

必需。 需要进行 JSON 序列化的对象。

toJSON 方法是 Date JavaScript 对象的内置成员。 它返回 UTC 时区的 ISO 格式日期字符串(由后缀 Z 表示)。

以下示例使用 toJSON 方法将大写的字符串成员值序列化。 在调用 JSON.stringify 时调用 toJSON 方法。

JavaScript

var contact = new Object();

contact.firstname = "Jesper";

contact.surname = "Aaberg";

contact.phone = ["555-0100", "555-0120"];

contact.toJSON = function(key)

 {

    var replacement = new Object();

    for (var val in this)

    {

        if (typeof (this[val]) === 'string')

            replacement[val] = this[val].toUpperCase();

        else

            replacement[val] = this[val]

    }

    return replacement;

};

var jsonText = JSON.stringify(contact);

/* The value of jsonText is:

'{"firstname":"JESPER","surname":"AABERG","phone":["555-0100","555-0120"]}'

*/

JSON.parse 函数 (JavaScript)

将 JavaScript 对象表示法 (JSON) 字符串转换为对象

语法:JSON.parse(text [, reviver])

text

必需。 一个有效的 JSON 字符串。

reviver

可选。 一个转换结果的函数。 将为对象的每个成员调用此函数。 如果成员包含嵌套对象,则先于父对象转换嵌套对象。 对于每个成员,会发生以下情况:

如果 reviver 返回一个有效值,则成员值将替换为转换后的值。

如果 reviver 返回它接收的相同值,则不修改成员值。

如果 reviver 返回 null 或 undefined,则删除成员。

以下示例使用 JSON.parse 将 JSON 字符串转换成对象。

var jsontext = '{"firstname":"Jesper","surname":"Aaberg","phone":["555-0100","555-0120"]}';

var contact = JSON.parse(jsontext);

document.write(contact.surname + ", " + contact.firstname);

// Output: Aaberg, Jesper

以下示例演示了如何使用 JSON.stringify 将数组转换成 JSON 字符串,然后使用 JSON.parse 将该字符串重新转换成数组。

var arr = ["a", "b", "c"];

var str = JSON.stringify(arr);

document.write(str);

document.write ("<br/>");

var newArr = JSON.parse(str);

while (newArr.length > 0) {

    document.write(newArr.pop() + "<br/>");

}

// Output:

// ["a","b","c"]

// c

// b

// a
Javascript 相关文章推荐
高效的表格行背景隔行变色及选定高亮的JS代码
Dec 04 Javascript
js四舍五入数学函数round使用实例
May 09 Javascript
Google Maps API地图应用示例分享
Oct 23 Javascript
上传图片预览JS脚本 Input file图片预览的实现示例
Oct 23 Javascript
js实现单击图片放大图片的方法
Feb 17 Javascript
jQuery的promise与deferred对象在异步回调中的作用
May 03 Javascript
jQuery操作动态生成的内容的方法
May 28 Javascript
Ionic2开发环境搭建教程
Aug 20 Javascript
浅谈Vue.js中ref ($refs)用法举例总结
Dec 19 Javascript
VUE解决微信签名及SPA微信invalid signature问题(完美处理)
Mar 29 Javascript
ES6顶层对象、global对象实例分析
Jun 14 Javascript
p5.js临摹旋转爱心
Oct 23 Javascript
浅谈JavaScript Math和Number对象
Jan 26 #Javascript
js判断一个字符串是否包含一个子串的方法
Jan 26 #Javascript
javascript中Object使用详解
Jan 26 #Javascript
JQuery中的事件及动画用法实例
Jan 26 #Javascript
javascript折半查找详解
Jan 26 #Javascript
JavaScript数据类型检测代码分享
Jan 26 #Javascript
浅谈Javascript中的Function与Object
Jan 26 #Javascript
You might like
Discuz 模板语句分析及知识技巧
2009/08/21 PHP
详解PHP多个进程配合redis的有序集合实现大文件去重
2019/03/06 PHP
教你如何解密js/vbs/vbscript加密的编码异处理小结
2008/06/25 Javascript
比较简单的异步加载JS文件的代码
2009/07/18 Javascript
JavaScript导出Excel实例详解
2014/11/25 Javascript
NodeJS学习笔记之(Url,QueryString,Path)模块
2015/01/13 NodeJs
javascript中CheckBox全选终极方案
2015/05/20 Javascript
AngularJS路由实现页面跳转实例
2017/03/03 Javascript
AngularJS 仿微信图片手势缩放的实例
2017/09/28 Javascript
小程序点赞收藏功能的实现代码示例
2018/09/07 Javascript
解决js相同的正则多次调用test()返回的值却不同的问题
2018/10/10 Javascript
如何优雅的在一台vps(云主机)上面部署vue+mongodb+express项目
2019/01/20 Javascript
使vue实现jQuery调用的两种方法
2019/05/12 jQuery
layui 根据后台数据动态创建下拉框并同时默认选中的实例
2019/09/02 Javascript
[06:33]DOTA2亚洲邀请赛小组赛第二日 TOP10精彩集锦
2015/01/31 DOTA
跟老齐学Python之dict()的操作方法
2014/09/24 Python
在Python中操作时间之tzset()方法的使用教程
2015/05/22 Python
Python简单生成随机姓名的方法示例
2017/12/27 Python
DRF跨域后端解决之django-cors-headers的使用
2019/01/27 Python
Django如何使用第三方服务发送电子邮件
2019/08/14 Python
在Python中使用MongoEngine操作数据库教程实例
2019/12/03 Python
python图形界面开发之wxPython树控件使用方法详解
2020/02/24 Python
AUC计算方法与Python实现代码
2020/02/28 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
2020/12/01 Python
澳大利亚电商Catch新西兰站:Catch.co.nz
2020/05/30 全球购物
奥利奥广告词
2014/03/20 职场文书
职工代表大会主持词
2014/04/01 职场文书
党的群众路线教育实践活动查摆问题及整改措施
2014/10/10 职场文书
爱心助学感谢信
2015/01/21 职场文书
优秀团员自我评价
2015/03/10 职场文书
自我推荐信格式模板
2015/03/24 职场文书
2015年青年志愿者工作总结
2015/05/20 职场文书
入团介绍人意见范文
2015/06/04 职场文书
Python识别花卉种类鉴定网络热门植物并自动整理分类
2022/04/08 Python
Python代码实现双链表
2022/05/25 Python
Nginx安装配置详解
2022/06/25 Servers