浅谈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 相关文章推荐
在线编辑器的实现原理(兼容IE和FireFox)
Mar 09 Javascript
javascript学习笔记(二十) 获得和设置元素的特性(属性)
Jun 20 Javascript
node.js中的fs.writeFileSync方法使用说明
Dec 14 Javascript
JS组件系列之Bootstrap table表格组件神器【终结篇】
May 10 Javascript
javascript添加前置0(补零)的几种方法
Jan 05 Javascript
详解node如何让一个端口同时支持https与http
Jul 04 Javascript
JS设置随机出现2个数字的实例代码
Jul 19 Javascript
对Vue2 自定义全局指令Vue.directive和指令的生命周期介绍
Aug 30 Javascript
layer父页获取弹出层输入框里面的值方法
Sep 02 Javascript
vue中watch和computed为什么能监听到数据的改变以及不同之处
Dec 27 Javascript
通过vue.extend实现消息提示弹框的方法记录
Jan 07 Vue.js
Typescript类型系统FLOW静态检查基本规范
May 25 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
php 攻击方法之谈php+mysql注射语句构造
2009/10/30 PHP
PHP 写文本日志实现代码
2010/05/18 PHP
小谈php正则提取图片地址
2014/03/27 PHP
php版本的cron定时任务执行器使用实例
2014/08/19 PHP
PHP中类的继承和用法实例分析
2016/05/24 PHP
PHP聚合式迭代器接口IteratorAggregate用法分析
2017/12/28 PHP
用javascript实现计算两个日期的间隔天数
2007/08/14 Javascript
自己开发Dojo的建议框架
2008/09/24 Javascript
基于JQuery的类似新浪微博展示信息效果的代码
2012/07/23 Javascript
JQUERY对单选框(radio)操作的小例子
2013/04/25 Javascript
javascript获取form里的表单元素的示例代码
2014/02/14 Javascript
网页收藏夹显示ICO图标(代码少)
2015/08/04 Javascript
简单实现限制uploadify上传个数
2015/11/16 Javascript
BootStrap中Table分页插件使用详解
2016/10/09 Javascript
关于bootstrap日期转化,bootstrap-editable的简单使用,bootstrap-fileinput的使用详解
2017/05/12 Javascript
浅谈在fetch方法中添加header后遇到的预检请求问题
2017/08/31 Javascript
vue-cli3.0配置及使用注意事项详解
2018/09/05 Javascript
浅谈webpack4 图片处理汇总
2018/09/12 Javascript
原生JS无缝滑动轮播图
2019/10/22 Javascript
[02:15]你好,这就是DOTA!
2015/08/05 DOTA
pycharm 使用心得(八)如何调用另一文件中的函数
2014/06/06 Python
python绘制散点图并标记序号的方法
2018/12/11 Python
详解Python安装tesserocr遇到的各种问题及解决办法
2019/03/07 Python
python 中pyqt5 树节点点击实现多窗口切换问题
2019/07/04 Python
使用python动态生成波形曲线的实现
2019/12/04 Python
Python 实现向word(docx)中输出
2020/02/13 Python
记一次Django响应超慢的解决过程
2020/09/17 Python
美国综合购物商城:UnbeatableSale.com
2018/11/28 全球购物
英语专业毕业生自荐信
2013/10/28 职场文书
物业保安岗位职责
2014/07/02 职场文书
派出所副所长四风问题个人整改措施思想汇报
2014/10/13 职场文书
大学生暑期社会实践证明范本
2014/10/24 职场文书
校长个人总结
2015/03/03 职场文书
原料仓管员岗位职责
2015/04/01 职场文书
2016大学生入党积极分子心得体会
2016/01/06 职场文书
MySQL分区路径子分区再分区
2022/04/13 MySQL