[关闭]
@yangfch3 2015-12-14T13:42:52.000000Z 字数 2636 阅读 3955

JSON

JavaScript


JSON 简介

JSONJavaScript Object Notation---JavaScript 对象表示法;是一种具有自我描述性、独立于语言、轻量级的文本数据交换格式

JSON 本质是一个 Js 对象,以普通文本格式进行数据传输。使用 JsJSON 数据的两个方法可以在 JSON 字符串与 Js 对象 之间转换。

JSON 数据(对象) 由多对 JSON 键JSON 值 组成,以 , 隔开,格式类似对象,但是对于各个 JSON 值 数据的格式另有严格要求。


JSON 值的格式要求


JSON 对象

JSON 对象为 ES5 新增 feature,用于处理 JSON 格式数据。JSON 对象有两个方法:JSON.stringifyJSON.parse


JSON.stringify()

JSON.stringify() 方法用于将一个值转换为字符串。该字符串符合 JSON 格式,并且可以被 JSON.parse 方法还原。


转换规则

几个小实例:

  1. JSON.stringify("abc") // ""abc""
  2. JSON.stringify(1) // "1"
  3. JSON.stringify(false) // "false"
  4. JSON.stringify([]) // "[]"
  5. JSON.stringify({}) // "{}"
  6. JSON.stringify([1, "false", false])
  7. // "[1,"false",false]"
  8. JSON.stringify({ name: "张三" })
  9. // '{"name":"张三"}'

特殊的:

  1. JSON.stringify({f:function(){alert("aaa")}})
  2. // "{}"
  3. JSON.stringify({f:function(){alert("aaa")},b:undefined,c:1})
  4. // "{"c":1}"
  5. // 对象中的函数在转化过程中会被忽略
  6. // 对象中的 undefined 在转化过程中会被忽略
  7. JSON.stringify({a:[ function(){}, undefined ]})
  8. // "{"a":[null,null]}"
  9. // 数组内的函数被转为 null
  10. // 数组内的 undefined 被转为 null
  11. JSON.stringify(new Date("2011-07-29"))
  12. //""2011-07-29T00:00:00.000Z""
  13. JSON.stringify(/foo/)
  14. // "{}"
  15. // 正则对象被转为空对象

注意点


参数

JSON.stringify() 可接受的第二个参数:


JSON.stringify() 可接受的 第三个 参数:

  1. JSON.stringify({ p1:1, p2:2 }, null, 2);
  2. // "{
  3. "p1": 1,
  4. "p2": 2
  5. }"
  6. JSON.stringify({ p1:1, p2:2 }, null, "|-");
  7. // "{
  8. |-"p1": 1,
  9. |-"p2": 2
  10. }"

注意:添加的空格与字符串不能超过10个


toJSON

如果 JSON.stringify 方法处理的对象,包含一个 toJSON 方法,则它会使用这个方法得到一个值,然后再将这个值转成字符串,而忽略其他成员。

  1. var o = {
  2. foo: 'foo',
  3. toJSON: function() {
  4. return 'bar';
  5. }
  6. };
  7. var json = JSON.stringify({x: o});
  8. // '{"x":"bar"}'

JSON.parse()

JSON.parse 方法用于将 JSON 字符串转化成对象。

如果传入的字符串不是有效的 JSON 格式,JSON.parse 方法将报错。

  1. JSON.parse("'String'") // illegal single quotes
  2. // SyntaxError: Unexpected token ILLEGAL

JSON.parse 方法可以接受一个处理函数,用法与 JSON.stringify 方法接受第二个参数类似。

  1. function f(key, value) {
  2. if ( key === ""){
  3. return value;
  4. }
  5. if ( key === "a" ) {
  6. return value + 10;
  7. }
  8. }
  9. var o = JSON.parse('{"a":1,"b":2}', f);
  10. o.a // 11
  11. o.b // undefined

JSON.parse() V.S eval()

JSON.parse 是使用 JavaScript 解析引擎的 JSON 解释器将符合 JSON 格式的字符串解析成 JSON 对象。

eval 则是利用 JavaScript 的内置函数将字符串直接转换为代码进行执行。所以 eval 可以将符合 JSON 格式的字符串直接转换为 JSON 对象代码运行。

二者都可以达到解析 JSON 的目的,前者更安全,性能更好,更符合规范!

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注