浅谈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 相关文章推荐
JavaScript 字符串处理函数使用小结
Dec 02 Javascript
基于jquery的获取浏览器窗口大小的代码
Mar 28 Javascript
jQuery实现鼠标滑过Div层背景变颜色的方法
Feb 17 Javascript
JS给Textarea文本框添加行号的方法
Aug 20 Javascript
jQuery实现带滑动条的菜单效果代码
Aug 26 Javascript
JavaScript获取当前cpu使用率的方法
Dec 15 Javascript
SublimeText自带格式化代码功能之reindent
Dec 27 Javascript
基于Bootstrap使用jQuery实现简单可编辑表格
May 04 Javascript
使用原生js+canvas实现模拟心电图的实例
Sep 20 Javascript
从parcel.js打包出错到选择nvm的全部过程
Jan 23 Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
Jun 17 Javascript
vue elementUI使用tabs与导航栏联动
Jun 21 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
thinkphp框架下实现登录、注册、找回密码功能
2016/04/06 PHP
PHP Yaf框架的简单安装使用教程(推荐)
2016/06/08 PHP
javascript网页关键字高亮代码
2008/07/30 Javascript
jQuery fadeTo方法调整图片的透明度使用介绍
2013/05/06 Javascript
jquery获取及设置outerhtml的方法
2015/03/09 Javascript
javascript父子页面通讯实例详解
2015/07/17 Javascript
JavaScript数组操作函数汇总
2016/08/05 Javascript
浅谈jQuery为哪般去掉了浏览器检测
2016/08/29 Javascript
javascript中活灵活现的Array对象详解
2016/11/30 Javascript
有关suggest快速删除后仍然出现下拉列表的bug问题
2016/12/02 Javascript
jQuery插件HighCharts绘制2D带有Legend的饼图效果示例【附demo源码下载】
2017/03/10 Javascript
js浏览器滚动条卷去的高度scrolltop(实例讲解)
2017/07/07 Javascript
理解nodejs的stream和pipe机制的原理和实现
2017/08/12 NodeJs
JS获取字符对应的ASCII码实例
2017/09/10 Javascript
深入理解Vuex 模块化(module)
2017/09/26 Javascript
node.js的exports、module.exports与ES6的export、export default深入详解
2017/10/26 Javascript
echarts整合多个类似option的方法实例
2018/07/10 Javascript
记一次webapck4 配置文件无效的解决历程
2018/09/19 Javascript
微信小程序用户授权,以及判断登录是否过期的方法
2019/05/10 Javascript
JS localStorage存储对象,sessionStorage存储数组对象操作示例
2020/02/15 Javascript
[02:19]2014DOTA2国际邀请赛 专访820少年们一起去追梦吧
2014/07/14 DOTA
[03:54]Ehome出征西雅图 回顾2016国际邀请赛晋级之路
2016/08/02 DOTA
Python的CGIHTTPServer交互实现详解
2018/02/08 Python
详解python中的json和字典dict
2018/06/22 Python
Python时间序列缺失值的处理方法(日期缺失填充)
2019/08/11 Python
pytorch实现用CNN和LSTM对文本进行分类方式
2020/01/08 Python
Python autoescape标签用法解析
2020/01/17 Python
python Tornado框架的使用示例
2020/10/19 Python
python xlsxwriter模块的使用
2020/12/24 Python
英国自行车商店:AW Cycles
2021/02/24 全球购物
优秀应届毕业生自荐信
2013/11/16 职场文书
我们的节日清明节活动方案
2014/03/05 职场文书
公司试用期员工自我评价
2014/09/17 职场文书
女儿满月酒致辞
2015/07/29 职场文书
如何使用Python提取Chrome浏览器保存的密码
2021/06/09 Python
关于PostgreSQL JSONB的匹配和交集问题
2021/09/14 PostgreSQL