浅谈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 相关文章推荐
常用参考资料(手册)下载或者链接
Jul 22 Javascript
javascript第一课
Feb 27 Javascript
javascript 火狐(firefox)不显示本地图片问题解决
Jul 05 Javascript
jquery中使用ajax获取远程页面信息
Nov 13 Javascript
jQuery之日期选择器的深入解析
Jun 19 Javascript
javascript中数组的concat()方法使用介绍
Dec 18 Javascript
IE6-8中Date不支持toISOString的修复方法
May 04 Javascript
jQuery Validate 相关参数及常用的自定义验证规则
Mar 06 Javascript
深入理解AngularJs-scope的脏检查(一)
Jun 19 Javascript
AngularJS 实现购物车全选反选功能
Oct 24 Javascript
详解微信小程序的不同函数调用的几种方法
May 08 Javascript
《javascript设计模式》学习笔记三:Javascript面向对象程序设计单例模式原理与实现方法分析
Apr 07 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
相对路径转化成绝对路径
2007/04/10 PHP
PHP初学者常见问题集合 修正版(21问答)
2010/03/23 PHP
PHP也能干大事 随机函数
2015/04/14 PHP
PHP使用DOM和simplexml读取xml文档的方法示例
2017/02/08 PHP
PHP-X系列教程之内置函数的使用示例
2017/10/16 PHP
Javascript Boolean、Nnumber、String 强制类型转换的区别详细介绍
2012/12/13 Javascript
把input初始值不写value的具体实现方法
2013/07/04 Javascript
json格式的时间显示为正常年月日的方法
2013/09/08 Javascript
JS+CSS实现自动改变切换方向图片幻灯切换效果的方法
2015/03/02 Javascript
由ReactJS的Hello world说开来
2015/07/02 Javascript
移动端jQuery修正Web页面滑动时div问题的两则实例
2016/05/30 Javascript
JavaScript获取IP获取的是IPV6 如何校验
2016/06/12 Javascript
浅谈JQuery+ajax+jsonp 跨域访问
2016/06/25 Javascript
js oncontextmenu事件使用详解
2017/03/25 Javascript
javascript中的replace函数(带注释demo)
2018/01/07 Javascript
bootstrap table.js动态填充单元格数据的多种方法
2019/07/18 Javascript
python教程之用py2exe将PY文件转成EXE文件
2014/06/12 Python
Python中的面向对象编程详解(下)
2015/04/13 Python
python实现数据写入excel表格
2018/03/25 Python
python找出完数的方法
2018/11/12 Python
Python sklearn KFold 生成交叉验证数据集的方法
2018/12/11 Python
Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解
2019/02/28 Python
Python 正则表达式爬虫使用案例解析
2019/09/23 Python
django中间键重定向实例方法
2019/11/10 Python
python+opencv实现车牌定位功能(实例代码)
2019/12/24 Python
如何理解python对象
2020/06/21 Python
PyQT5速成教程之Qt Designer介绍与入门
2020/11/02 Python
python中time、datetime模块的使用
2020/12/14 Python
python opencv实现直线检测并测出倾斜角度(附源码+注释)
2020/12/31 Python
黄河的主人教学反思
2014/02/07 职场文书
保证书范文大全
2014/04/28 职场文书
法律讲堂观后感
2015/06/11 职场文书
卫生主题班会
2015/08/14 职场文书
《山中访友》教学反思
2016/02/24 职场文书
浅谈Golang 嵌套 interface 的赋值问题
2021/04/29 Golang
Python 的演示平台支持 WSGI 接口的应用
2022/04/20 Python