@yangfch3
2015-12-14T05:42:52.000000Z
字数 2636
阅读 4490
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 被转为 nullJSON.stringify(new Date("2011-07-29"))//""2011-07-29T00:00:00.000Z""JSON.stringify(/foo/)// "{}"// 正则对象被转为空对象
注意点:
undefined,这个属性会在对象被转换时被省略undefined 或 函数,这些元素在数组被转换的过程中会被转换为 nullenumerable: 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:不需要参数时,使用 nullJSON.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 // 11o.b // undefined
JSON.parse 是使用 JavaScript 解析引擎的 JSON 解释器将符合 JSON 格式的字符串解析成 JSON 对象。
eval 则是利用 JavaScript 的内置函数将字符串直接转换为代码进行执行。所以 eval 可以将符合 JSON 格式的字符串直接转换为 JSON 对象代码运行。
二者都可以达到解析 JSON 的目的,前者更安全,性能更好,更符合规范!