JavaScript中,JSON对象解析JavaScript Object Notation (JSON) 以及将值转换成JSON的方法。JSON对象不能被构建和直接调用,它仅提供了两个工具的方法——Parse和stringtify。
JSON是一个面向序列化对象、数组、数值、字符串、布尔值和null的语法格式。它基于JavaScript语法,但又有所不同。例如对象和数组的属性名必须以双引号标记。详细的语法格式如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
JSON = null or true or false or JSONNumber or JSONString or JSONObject or JSONArray JSONNumber = - PositiveNumber or PositiveNumber PositiveNumber = DecimalNumber or DecimalNumber . Digits or DecimalNumber . Digits ExponentPart or DecimalNumber ExponentPart DecimalNumber = 0 or OneToNine Digits ExponentPart = e Exponent or E Exponent Exponent = Digits or + Digits or - Digits Digits = Digit or Digits Digit Digit = 0 through 9 OneToNine = 1 through 9 JSONString = "" or " StringCharacters " StringCharacters = StringCharacter or StringCharacters StringCharacter StringCharacter = any character except " or \ or U+0000 through U+001F or EscapeSequence EscapeSequence = \" or \/ or \\ or \b or \f or \n or \r or \t or \u HexDigit HexDigit HexDigit HexDigit HexDigit = 0 through 9 or A through F or a through f JSONObject = { } or { Members } Members = JSONString : JSON or Members , JSONString : JSON JSONArray = [ ] or [ ArrayElements ] ArrayElements = JSON or ArrayElements , JSON |
JSON.parse(text[, reviver])
将字符串解析为JSON对象。reviver是一个可选的函数参数,用于转换结果。 它将为对象的每个成员调用此函数。 如果成员包含嵌套对象,则先于父对象转换嵌套对象。 对于每个成员,规则如下:
如果 reviver 返回一个有效值,则成员值将替换为转换后的值。
如果 reviver 返回它接收的相同值,则不修改成员值。
如果 reviver 返回 null 或 undefined,则删除成员。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
var j1 = JSON.parse('{}'); {} var j2 = JSON.parse('[1, 5, false]') [ 1, 5, false ] var j3 = JSON.parse('{"a":1, "b":2, "c":[1, true, "hello"]}') 1 [ 1, true, 'hello' ] console.log(JSON.parse('{"p": 5}', function (k, v) { if(k === "") return v; return v * 2; })); JSON.parse('{"1": 1, "2": 2,"3": {"4": 4, "5": {"6": 6}}}', function (k, v) { console.log(k); return v; }); //第一个仅会输出最顶端元素,第二个从输出可以看出经过了深度遍历,最后输出顶端key:null。 { p: 10 } 1 2 4 6 5 3 |
JSON.stringify(value[, replacer [, space]])
返回一个JSON结构的字符串,可以只包含特定的属性,或以用户定义的方式来替换属性的值。具体语法格式参考JSON.stringify 语法讲解,其中replacer的规则同上,当返回undefined时,则删除该k/v成员。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
console.log(JSON.stringify([1, "false", false])); [1,"false",false] console.log(JSON.stringify({name:"hello", value:[1, "false", false]})); {"name":"hello","value":[1,"false",false]} function replacer(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, replacer); {"week":45,"month":7} |
我本意并不是要指责或者追究责任什么的,也不是非要讨个方案/说法啥的。对我个人来说,这真的是种情怀——从一开始我就是准备收藏着,根本没打算正常穿(穿了会磨损嘛)。所以做成什么样于我个人而言没那么重要,有个东西拿到手里我就满意了。只是说起来,觉得这件事情和预