浅谈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中jqGrid分页实现代码
Nov 04 Javascript
JS中的prototype与面向对象的实例讲解
May 22 Javascript
jQuery实现鼠标移到元素上动态提示消息框效果
Oct 20 Javascript
javascript页面动态显示时间变化示例代码
Dec 18 Javascript
WebApi+Bootstrap+KnockoutJs打造单页面程序
May 16 Javascript
Bootstrap登陆注册页面开发教程
Jul 12 Javascript
自己封装的一个简单的倒计时功能实例
Nov 23 Javascript
Vue.js 插件开发详解
Mar 29 Javascript
JS利用cookies设置每隔24小时弹出框
Apr 20 Javascript
JS实现自动轮播图效果(自适应屏幕宽度+手机触屏滑动)
Jun 19 Javascript
jQuery Layer弹出层传值到父页面的实现代码
Aug 17 jQuery
js 将多个对象合并成一个对象 assign方法的实现
Sep 24 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 自写函数代码 获取关键字 去超链接
2010/02/08 PHP
php上传apk后自动提取apk包信息的使用(示例下载)
2013/04/26 PHP
PHP生成不同颜色、不同大小的tag标签函数
2013/09/23 PHP
php上传文件并存储到mysql数据库的方法
2015/03/16 PHP
十个PHP高级应用技巧果断收藏
2015/09/25 PHP
几行代码轻松实现PHP文件打包下载zip
2017/03/01 PHP
php封装的pdo数据库操作工具类与用法示例
2019/05/08 PHP
range 标准化之获取
2011/08/28 Javascript
Javascript动态创建div的方法
2015/02/09 Javascript
jQuery的css() 方法使用指南
2015/05/03 Javascript
Bootstrap轮播插件简单使用方法介绍
2016/06/21 Javascript
浅谈JQ中mouseover和mouseenter的区别
2016/09/13 Javascript
js实现弹窗居中的简单实例
2016/10/09 Javascript
如何从零开始利用js手写一个Promise库详解
2018/04/19 Javascript
vue 中基于html5 drag drap的拖放效果案例分析
2018/11/01 Javascript
vue 实现搜索的结果页面支持全选与取消全选功能
2019/05/10 Javascript
webpack自动打包和热更新的实现方法
2019/06/24 Javascript
原生JavaScript实现购物车
2021/01/10 Javascript
vue实现一个获取按键展示快捷键效果的Input组件
2021/01/13 Vue.js
Vue实现多页签组件
2021/01/14 Vue.js
Vue中使用wangeditor富文本编辑的问题
2021/02/07 Vue.js
[02:28]DOTA2英雄基础教程 灰烬之灵
2013/12/19 DOTA
pandas使用get_dummies进行one-hot编码的方法
2018/07/10 Python
Python 用matplotlib画以时间日期为x轴的图像
2019/08/06 Python
pandas实现DataFrame显示最大行列,不省略显示实例
2019/12/26 Python
python中的django是做什么的
2020/07/31 Python
基于Django快速集成Echarts代码示例
2020/12/01 Python
HTML5里autofocus自动聚焦属性使用介绍
2016/06/22 HTML / CSS
IWOOT美国:新奇的小玩意
2018/04/27 全球购物
波兰购物网站:MALL.PL
2019/05/01 全球购物
.TTL是什么?有什么用处,通常那些工具会用到它?(ping? traceroute? ifconfig? netstat?)
2016/05/09 面试题
美术学专业求职信
2014/07/23 职场文书
党的群众路线教育实践活动个人对照检查材料(企业)
2014/11/05 职场文书
后天观后感
2015/06/08 职场文书
SQL实现LeetCode(178.分数排行)
2021/08/04 MySQL
JavaScript严格模式不支持八进制的问题讲解
2021/11/07 Javascript