@yangfch3
2015-12-14T13:42:52.000000Z
字数 2636
阅读 3920
JavaScript
JSON
:JavaScript Object Notation
---JavaScript
对象表示法;是一种具有自我描述性、独立于语言、轻量级的文本数据交换格式
JSON
本质是一个 Js
对象,以普通文本格式进行数据传输。使用 Js
中 JSON
数据的两个方法可以在 JSON
字符串与 Js 对象
之间转换。
JSON
数据(对象) 由多对 JSON 键
,JSON 值
组成,以 ,
隔开,格式类似对象,但是对于各个 JSON 值
数据的格式另有严格要求。
JSON 键
:规定为字符串,双引号包住JSON 值
:格式见下节null
都会被转为 null
。JSON
值。JSON
对象为 ES5
新增 feature
,用于处理 JSON
格式数据。JSON
对象有两个方法:JSON.stringify
和 JSON.parse
。
JSON.stringify()
方法用于将一个值转换为字符串。该字符串符合 JSON
格式,并且可以被 JSON.parse
方法还原。
几个小实例:
JSON.stringify("abc") // ""abc""
JSON.stringify(1) // "1"
JSON.stringify(false) // "false"
JSON.stringify([]) // "[]"
JSON.stringify({}) // "{}"
JSON.stringify([1, "false", false])
// "[1,"false",false]"
JSON.stringify({ name: "张三" })
// '{"name":"张三"}'
特殊的:
JSON.stringify({f:function(){alert("aaa")}})
// "{}"
JSON.stringify({f:function(){alert("aaa")},b:undefined,c:1})
// "{"c":1}"
// 对象中的函数在转化过程中会被忽略
// 对象中的 undefined 在转化过程中会被忽略
JSON.stringify({a:[ function(){}, undefined ]})
// "{"a":[null,null]}"
// 数组内的函数被转为 null
// 数组内的 undefined 被转为 null
JSON.stringify(new Date("2011-07-29"))
//""2011-07-29T00:00:00.000Z""
JSON.stringify(/foo/)
// "{}"
// 正则对象被转为空对象
注意点:
undefined
,这个属性会在对象被转换时被省略undefined
或 函数,这些元素在数组被转换的过程中会被转换为 null
enumerable: false
)时,该属性会被忽略,跳过转换JSON.stringify()
可接受的第二个参数:
数组(filter
):指定对象的 JSON
转换哪些属性需要转,另外的不需要转
JSON.stringify({ a:1, b:2 }, ['a'])
// "{"a":1}"
函数(mapping
):更改默认的字符串化的行为,相当于对对象属性的值进行 mapping
操作
// 对象的各个属性及其值将作为参数传入 f;
function f(key, value) {
if (typeof value === "number") {
key = "a" + key;
value = 2 * value;
}
return value;
}
JSON.stringify({ a:1, b:2 }, f)
null
:不需要参数时,使用 null
JSON.stringify()
可接受的 第三个 参数:
JSON.stringify({ p1:1, p2:2 }, null, 2);
// "{
"p1": 1,
"p2": 2
}"
JSON.stringify({ p1:1, p2:2 }, null, "|-");
// "{
|-"p1": 1,
|-"p2": 2
}"
注意:添加的空格与字符串不能超过10个
如果 JSON.stringify
方法处理的对象,包含一个 toJSON
方法,则它会使用这个方法得到一个值,然后再将这个值转成字符串,而忽略其他成员。
var o = {
foo: 'foo',
toJSON: function() {
return 'bar';
}
};
var json = JSON.stringify({x: o});
// '{"x":"bar"}'
JSON.parse
方法用于将 JSON
字符串转化成对象。
如果传入的字符串不是有效的 JSON
格式,JSON.parse
方法将报错。
JSON.parse("'String'") // illegal single quotes
// SyntaxError: Unexpected token ILLEGAL
JSON.parse
方法可以接受一个处理函数,用法与 JSON.stringify
方法接受第二个参数类似。
function f(key, value) {
if ( key === ""){
return value;
}
if ( key === "a" ) {
return value + 10;
}
}
var o = JSON.parse('{"a":1,"b":2}', f);
o.a // 11
o.b // undefined
JSON.parse
是使用 JavaScript
解析引擎的 JSON
解释器将符合 JSON
格式的字符串解析成 JSON
对象。
eval
则是利用 JavaScript
的内置函数将字符串直接转换为代码进行执行。所以 eval
可以将符合 JSON
格式的字符串直接转换为 JSON
对象代码运行。
二者都可以达到解析 JSON
的目的,前者更安全,性能更好,更符合规范!