浅谈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 相关文章推荐
学习面向对象之面向对象的术语
Nov 30 Javascript
javascript中删除指定数组中指定的元素的代码
Feb 12 Javascript
jqplot通过ajax动态画折线图的方法及思路
Dec 08 Javascript
jQuery trigger()方法用法介绍
Jan 13 Javascript
使用AmplifyJS组件配合JavaScript进行编程的指南
Jul 28 Javascript
jQuery实现表单步骤流程导航代码分享
Aug 28 Javascript
使用javascript插入样式
Mar 14 Javascript
浅谈node的事件机制
Oct 09 Javascript
简易Vue评论框架的实现(父组件的实现)
Jan 08 Javascript
vue中引用阿里字体图标的方法
Feb 10 Javascript
jquery分页优化操作实例分析
Aug 23 jQuery
如何在VUE中使用vue-awesome-swiper
Jan 04 Vue.js
浅谈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检查函数必传参数是否存在的实例详解
2017/08/28 PHP
jquery实现的一个文章自定义分段显示功能
2014/05/23 Javascript
jquery实现导航固定顶部的效果仿蘑菇街
2014/10/22 Javascript
js获取会话框prompt的返回值的方法
2015/01/10 Javascript
js实现在网页上简单显示时间的方法
2015/03/02 Javascript
jquery插件validation实现验证身份证号等
2015/06/04 Javascript
jQuery zclip插件实现跨浏览器复制功能
2015/11/02 Javascript
深入解析JavaScript框架Backbone.js中的事件机制
2016/02/14 Javascript
前端弹出对话框 js实现ajax交互
2016/09/09 Javascript
jQuery鼠标移动图片上实现放大效果
2017/06/25 jQuery
微信小程序使用image组件显示图片的方法【附源码下载】
2017/12/08 Javascript
jQuery实现文字超过1行、2行或规定的行数时自动加省略号的方法
2018/03/28 jQuery
关于layui表单中按钮自动提交的解决方法
2019/09/09 Javascript
新手入门js闭包学习过程解析
2019/10/08 Javascript
[02:28]PWL开团时刻DAY3——Ink Ice与DeMonsTer之间的勾心斗角
2020/11/03 DOTA
python实现ftp客户端示例分享
2014/02/17 Python
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
2016/06/18 Python
基于python时间处理方法(详解)
2017/08/14 Python
用python爬取租房网站信息的代码
2018/12/14 Python
Python实现FTP弱口令扫描器的方法示例
2019/01/31 Python
pandas 使用均值填充缺失值列的小技巧分享
2019/07/04 Python
通过Python编写一个简单登录功能过程解析
2019/09/04 Python
python psutil监控进程实例
2019/12/17 Python
CSS3制作日历实现代码
2012/01/21 HTML / CSS
CSS3制作彩色进度条样式的代码示例分享
2016/06/23 HTML / CSS
基于ccs3的timeline时间线实现方法
2020/04/30 HTML / CSS
Html5页面二次分享的实现
2018/07/30 HTML / CSS
canvas 绘图时位置偏离的问题解决
2020/09/16 HTML / CSS
windeln官方海外旗舰店:德淘超人气母婴超市
2017/12/15 全球购物
Lookfantastic台湾:英国彩妆美发保养购物网
2018/03/26 全球购物
怎样拟定创业计划书
2014/05/01 职场文书
新闻专业毕业生求职信
2014/08/08 职场文书
太行山上观后感
2015/06/05 职场文书
python读取pdf格式文档的实现代码
2021/04/01 Python
七个非常实用的Python工具包总结
2021/06/15 Python
PHP正则表达式之RCEService回溯
2022/04/11 PHP