Using native JSON
2015-07-26 17:40
543 查看
文介绍了兼容ECMAScript 5 标准的原生JSON对象. 在不支持原生JSON对象的旧版本Firefox中,该如何处理JSON数据.请查看 JSON.
原生JSON对象包含有两个关键方法.
注意:由于JSON规范的限制,如果一个对象存在属性值为函数的属性,则在使用JSON.stringify()方法对该对象进行序列化时.这个属性将不会被遍历到.
JavaScript 1.8.5 备注
引入于 JavaScript 1.8.5 (Firefox 4),
从Firefox 3.5.4起,
如果返回一个
如果返回一个
如果返回一个
如果返回一个其他类型的对象, 则该对象的键值对会被递归的按照上述的规则添加到JSON字符串中, 但如果该对象是function类型的, 则它不会变遍历.
如果返回
注意: 你不能通过
如果
JSON
原生JSON对象包含有两个关键方法.
JSON.parse()方法用来解析JSON字符串,并且重构为JavaScript对象,而
JSON.stringify()方法可以将javascript对象转换为等价的JSON字符串.
注意:由于JSON规范的限制,如果一个对象存在属性值为函数的属性,则在使用JSON.stringify()方法对该对象进行序列化时.这个属性将不会被遍历到.
解析JSON字符串
将JSON字符串解析成为一个JavaScript对象,你只需要将JSON字符串作为参数传递给JSON.parse()方法,如下:
var jsObject = JSON.parse(jsonString);
JavaScript 1.8.5 备注
引入于 JavaScript 1.8.5 (Firefox 4),
JSON.parse()不允许最后一个键值对后面存在逗号
// JavaScript 1.8.5中,下述两行代码都会抛出SyntaxError异常 var jsObject = JSON.parse("[1, 2, 3, 4, ]"); var jsObject = JSON.parse("{ \"foo\" : 1, }");
将对象转为JSON
将一个JavaScript对象字符串化为JSON,你只需要将该对象作为参数传递给JSON.stringify(
)方法,如下:
var foo = {}; foo.bar = "new property"; foo.baz = 3; var jsonString = JSON.stringify(foo);
jsonString的新值为
'{"bar":"new property","baz":3}'.
从Firefox 3.5.4起,
JSON.stringify()提供一个可选参数来提供额外的自定义转换方法的能力.如下:
jsonString = JSON.stringify(value [, replacer [, space]])
value将要转为JSON字符串的javascript对象.
replacer该参数可以是多种类型,如果是一个函数,则它可以改变一个javascript对象在字符串化过程中的行为, 如果是一个包含
String和
Number对象的数组,则它将作为一个白名单.只有那些键存在域该白名单中的键值对才会被包含进最终生成的JSON字符串中.如果该参数值为null或者被省略,则所有的键值对都会被包含进最终生成的JSON字符串中.
space该参数可以是一个
String或
Number对象,作用是为了在输出的JSON字符串中插入空白符来增强可读性. 如果是
Number对象, 则表示用多少个空格来作为空白符; 最大可为10,大于10的数值也取10.最小可为1,小于1的数值无效,则不会显示空白符. 如果是个
String对象, 则该字符串本身会作为空白符,字符串最长可为10个字符.超过的话会截取前十个字符. 如果该参数被省略 (或者为null), 则不会显示空白符.
replacer 参数
replacer参数可以是一个函数或者是一个数组.如果是函数, 则该函数会被传入两个参数, 分别是当前正在被字符串化的键值对的键和值. 初始化时,一个默认的键值对(键为空,值为要JSON化的对象)会传入这个函数, 然后,要JSON化的对象或者数组的每个键值对也会一级一级被传入这个函数. 该函数的返回值会影响正在被字符串化的键值对会不会被加入最终生成的JSON字符串中化,如下:
如果返回一个
Number类型的值, 则该数字会通过toString方法转换成字符串,来作为正在被字符串化的键值对中的值被添加到JSON字符串中.
如果返回一个
String类型的值, 则该字符串会作为正在被字符串化的键值对中的值被添加到JSON字符串中.
如果返回一个
Boolean类型的值, 则该布尔值会转化成字符串"true"或"false" ,来作为正在被字符串化的键值对中的值被添加到JSON字符串中.
如果返回一个其他类型的对象, 则该对象的键值对会被递归的按照上述的规则添加到JSON字符串中, 但如果该对象是function类型的, 则它不会变遍历.
replacer函数会转而处理下一个键值对.
如果返回
undefined, 则该键值对不会被添加到JSON字符串中.
注意: 你不能通过
replacer函数剔除数组中的某些值.
例子
function censor(key, value) { if (typeof(value) == "string") { return undefined; } return value; } var foo = {foundation: "Mozilla", model: "box", week: 45, transport: "car", month: 7}; var jsonString = JSON.stringify(foo, censor);
jsonString的新值为
{"week":45,"month":7}.
如果
replacer是一个数组, 则源对象中,只有键存在
replacer数组中的键值对,才会被包含进最终的JSON字符串中.
相关链接
ECMAScript 5 support in MozillaJSON
相关文章推荐
- js数组转换成json数组(包含extjs的checkbox勾选项获取办法)
- 语句和函数
- 操作符
- Extjs获取组件的方法
- JavaScript中String方法
- Servlet+JSP 原理
- js自定义插件-选项卡
- JS闭包
- 【实例】javascript中使用event.target获取触发该事件标签的相关数据而不是通过document
- JSP之param动作
- JS 解析XML文件
- JSP之forward动作
- JSP 获取真实IP地址的代码
- 【bzoj1031】【JSOI2007】【字符加密Cipher】
- JSP学习笔记(四):点击按钮跳转到action
- JSP之include指令和动作
- JavaScript 基础 二
- JavaScript:删除节点(removeChild)该留意的一点
- 理解JavaScript闭包
- JSON解析:NSData转数组,通过字典转模型的具体实现