浅谈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 面向对象编程
Oct 28 Javascript
jquery实现不同大小浏览器使用不同的css样式表的方法
Apr 02 Javascript
js图片自动轮播代码分享(js图片轮播)
May 06 Javascript
JQuery表格拖动调整列宽效果(自己动手写的)
Sep 01 Javascript
jQuery实现表格行上下移动和置顶效果
Jun 05 Javascript
基于jquery实现智能表单验证操作
May 09 Javascript
js制作网站首页图片轮播特效代码
Aug 30 Javascript
js实现碰撞检测特效代码分享
Oct 16 Javascript
原生js图片轮播效果实现代码
Oct 19 Javascript
js获取地址栏中传递的参数(两种方法)
Feb 08 Javascript
js实现不提示直接关闭网页窗口
Mar 30 Javascript
jQuery+CSS实现的table表格行列转置功能示例
Jan 08 jQuery
浅谈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
php下批量挂马和批量清马代码
2011/02/27 PHP
PHP中使用array函数新建一个数组
2015/11/19 PHP
记录一次排查PHP脚本执行卡住的问题
2016/12/27 PHP
[原创]php token使用与验证示例【测试可用】
2017/08/30 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
Aster vs KG BO3 第二场2.18
2021/03/10 DOTA
jquery animate图片模向滑动示例代码
2011/01/26 Javascript
最新28个很棒的jQuery 教程
2011/05/28 Javascript
js+css实现的简单易用兼容好的分页
2013/12/30 Javascript
jquery sortable的拖动方法示例详解
2014/01/16 Javascript
JavaScript中对象属性的添加和删除示例
2014/05/12 Javascript
利用原生JavaScript获取元素样式只是获取而已
2014/10/08 Javascript
javascript每日必学之循环
2016/02/19 Javascript
Node.js批量给图片加水印的方法
2016/11/15 Javascript
使用webpack3.0配置webpack-dev-server教程
2018/05/29 Javascript
vue系列之requireJs中引入vue-router的方法
2018/07/18 Javascript
vue实现日历备忘录功能
2020/09/24 Javascript
vue2 拖动排序 vuedraggable组件的实现
2019/08/08 Javascript
微信小程序返回上一级页面的实现代码
2020/06/19 Javascript
vue组件开发之tab切换组件使用详解
2020/08/21 Javascript
vue实现div可拖动位置也可改变盒子大小的原理
2020/09/16 Javascript
在Python中用keys()方法返回字典键的教程
2015/05/21 Python
python 3.6 tkinter+urllib+json实现火车车次信息查询功能
2017/12/20 Python
django启动uwsgi报错的解决方法
2018/04/08 Python
Python模拟登录的多种方法(四种)
2018/06/01 Python
在Pycharm中项目解释器与环境变量的设置方法
2018/10/29 Python
10款最好的Python开发编辑器
2019/07/03 Python
python温度转换华氏温度实现代码
2020/12/06 Python
移动端Web页面的CSS3 flex布局快速上手指南
2016/05/31 HTML / CSS
英国知名奢侈品包包品牌:Milli Millu
2016/12/22 全球购物
在线实验室测试:HealthLabs.com
2020/05/03 全球购物
学校采购员岗位职责
2014/01/02 职场文书
优秀应届生求职信
2014/06/16 职场文书
大学生求职信怎么写
2015/03/19 职场文书
2016年万圣节家长开放日活动总结
2016/04/05 职场文书
快消品行业营销模式与盈利模式分享
2019/09/27 职场文书