原文在发布在 oschina,选了几个不熟悉的记下来。

JSON JS 对象
键名 必须为双引号 不加、单引号、双引号都可以
属性值 字符串、数值、对象、数组、布尔值、null 都可以
逗号问题 最后一个属性后面不能有逗号 无所谓
数值 前导 0 不能用,小数点后必须有数字 没限制

字符串内容

除了"\只玩的所有UNICODE字符或控制字符。

  1. \" 引号
  2. \\ 反斜杠
  3. \/ 斜杠
  4. \b 终端退格
  5. \f 终端换页
  6. \n 换行符
  7. \r 终端回车
  8. \t 制表符
  9. \u 4 hexadecimal digits

JSON 不是 JS 的子集

var code = '"\u2028\u2029"';
JSON.parse(code); // works fine
eval(code); // fails

这两个字符\u2028\u2029分别表示行分隔符和段落分隔符,JSON.parse 可以正常解析,但是当做 js 解析时会报错。

JSON.stringify

不是双引号的,自动变为双引号。 最后一个属性后有逗号的,自动取掉逗号。 非数组对象顺序有可能改变。 布尔值、数字、字符串会自动转换成原始值。 new String('blah') 会变成 blah new Number(23) 会变成 23

下面是第二个参数:

JSON.stringify({
 name: "Bruce Wayne",
 nick: "Batman"
}, (key, value) => {
 if(key == "nick") {
  return "The " + value
 } else {
  return value
 }
})                   // "{"name":"Bruce Wayne","nick":"The Batman"}"
JSON.stringify({
 name: "Bruce Wayne",
 nick: "Batman"
}, ["phone", "nick"]
)                    // "{"nick":"Batman"}"

第三个参数为美化用。

JSON.parse

合法JSONString解析为JS对象。 可选的第二个参数可以定义一个在解析后对将要返回的JS对象进行操作的函数。

Object.toJSON

重写这个方法返回一个对象的时候,JSON.stringify就变了:

var info={
    "msg":"I Love You",
    "toJSON":function(){
        var replaceMsg=new Object()
        replaceMsg["msg"]="Go Die"
        return replaceMsg
    }
}

JSON.stringify(info)       //  "{"msg":"Go Die"}"

results matching ""

    No results matching ""