浅谈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 相关文章推荐
jquery multiSelect 多选下拉框
Jul 09 Javascript
eclipse如何忽略js文件报错(附图)
Oct 30 Javascript
window.print打印指定div指定网页指定区域的方法
Aug 04 Javascript
Node.js程序中的本地文件操作用法小结
Mar 06 Javascript
总结AngularJS开发者最常犯的十个错误
Aug 31 Javascript
Vue keep-alive实践总结(推荐)
Aug 31 Javascript
vue 2.0 购物车小球抛物线的示例代码
Feb 01 Javascript
iphone刘海屏页面适配方法
May 07 Javascript
vue中axios实现数据交互与跨域问题
May 12 Javascript
深入了解响应式React Native Echarts组件
May 29 Javascript
layer.confirm()右边按钮实现href的例子
Sep 27 Javascript
vue-cli3.0实现一个多页面应用的历奇经历记录总结
Mar 16 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 上传文件的方法(类)
2009/07/30 PHP
不重新编译PHP为php增加openssl模块的方法
2011/06/14 PHP
PHP PDOStatement对象bindpram()、bindvalue()和bindcolumn之间的区别
2014/11/20 PHP
[原创]php实现子字符串位置相互对调互换的方法
2016/06/02 PHP
PHP 实现 JSON 数据的编码和解码操作详解
2020/04/22 PHP
ajax如何实现页面局部跳转与结果返回
2015/08/24 Javascript
谈谈javascript中使用连等赋值操作带来的问题
2015/11/26 Javascript
基本DOM节点操作
2017/01/17 Javascript
vue组件 $children,$refs,$parent的使用详解
2017/07/31 Javascript
jQuery md5加密插件jQuery.md5.js用法示例
2018/08/24 jQuery
vue实现点击隐藏与显示实例分享
2019/02/13 Javascript
Vue之封装公用变量以及实现方式
2020/07/31 Javascript
python使用htmllib分析网页内容的方法
2015/05/08 Python
详解python如何调用C/C++底层库与互相传值
2016/08/10 Python
利用python实现命令行有道词典的方法示例
2017/01/31 Python
Python正则表达式分组概念与用法详解
2017/06/24 Python
python 实现A*算法的示例代码
2018/08/13 Python
tensorflow2.0保存和恢复模型3种方法
2020/02/03 Python
删除pycharm鼠标右键快捷键打开项目的操作
2021/01/16 Python
将HTML5 Canvas的内容保存为图片借助toDataURL实现
2013/05/20 HTML / CSS
video.js支持m3u8格式直播的实现示例
2020/05/20 HTML / CSS
林清轩官方网站:山茶花润肤油开创者
2016/10/26 全球购物
全世界最美丽的四星和五星级酒店预订:Prestigia.com
2017/11/15 全球购物
财务管理职业生涯规划范文
2013/12/27 职场文书
节约用水倡议书
2014/04/16 职场文书
促销活动计划书
2014/05/02 职场文书
生日宴会策划方案
2014/06/03 职场文书
四风对照检查材料范文
2014/09/27 职场文书
党的群众路线教育实践活动心得体会(企业)
2014/11/03 职场文书
体育教师个人工作总结
2015/02/09 职场文书
财务会计求职信范文
2015/03/20 职场文书
实习单位推荐信
2015/03/27 职场文书
2016孝老爱亲模范事迹材料
2016/02/26 职场文书
uniapp开发小程序的经验总结
2021/04/08 Javascript
python实现大文本文件分割成多个小文件
2021/04/20 Python
webpack介绍使用配置教程详解webpack介绍和使用
2022/06/25 Javascript