一、JSON——JavaScript Object Notation
JSON 是一种语法用来序列化对象、数组、数值、字符串、布尔值和null 。它基于 JavaScript 语法,但与之不同:一些JavaScript不是JSON,一些JSON不是JavaScript。
JavaScript类型 | JSON 区别 |
---|---|
对象和数组 |
属性名称必须是双引号字符串; 最后一个属性后不能有逗号。 |
数值 |
前导零是禁止的(在 JSON.stringify 零将被忽略,但在 JSON.parse 它将抛出 SyntaxError); 小数点后必须至少有一位数字。 |
字符串 |
只有有限的一些字符可能会被转义; 禁止某些控制字符; Unicode 行分隔符 (U+2028)和段分隔符 (U+2029)被允许 ; 字符串必须是双引号。 请参见以下示例,其中JSON.parse()能够正常解析,但把它当作JavaScript解析时会抛出 let code = '"u2028u2029"'; JSON.parse(code); // 工作正常 eval(code); // 失败 |
主要有两种方法:
JSON.parse() :
解析一个JSON字符串,可选地转换生成的值及其属性,并返回值。
JSON.stringify():
返回与指定值相对应的一个JSON字符串,可选地仅包含某些属性或以用户定义的方式替换属性值。
1.1 对象和数组
1)json属性名称必须是双引号字符串
js中对象和数组属性名可以加双引号或者单引号或者不加引号,都能识别。
console.log({"text" : 1 });//Object {text: 1} console.log({'text' : 1 });//Object {text: 1} console.log({text : 1 });//Object {text: 1}
json中属性名称必须是双引号字符串,即使是单引号也不行(JSON.parse转换会报错)。
json属性名不加引号报错:
JSON.parse('{text : 1 }'); //Uncaught SyntaxError: Unexpected token t in JSON at position 1 //at JSON.parse (<anonymous>)
json属性名单引号报错。
JSON.parse("{'text' : 1 }"); //Uncaught SyntaxError: Unexpected token ' in JSON at position 1 //at JSON.parse (<anonymous>)
替换成属性双引号:
JSON.parse('{"text" : 1 }');
2)json最后一个属性后不能有逗号
1 JSON.parse('[1, 2, 3, 4, ]'); 2 JSON.parse('{"text" : 1, }'); 3 //Uncaught SyntaxError: Unexpected token ] in JSON at position 13 4 //at JSON.parse (<anonymous>)
1.2 数值
1) 前导零是禁止的(在 JSON.stringify 零将被忽略,但在 JSON.parse 它将抛出 SyntaxError)
数字不能用 0 开头,比如01。
1 JSON.parse('{"text" : 01 }'); 2 //VM63:1 Uncaught SyntaxError: Unexpected token t in JSON at position 1 3 //at JSON.parse (<anonymous>)
正确写法:去除数字前0
JSON.parse('{"text" : 1 }');
2) 小数点后必须至少有一位数字
1 JSON.parse('{"text" : 1. }'); 2 //Uncaught SyntaxError: Unexpected token t in JSON at position 1 3 // at JSON.parse (<anonymous>)
正确写法:小数点后添加0
JSON.parse('{"text" : 1.0 }');
二、完整的json语法
JSON = null or true or false or JSONNumber or JSONString or JSONObject or JSONArray
JSONNumber
JSONNumber = - PositiveNumber//正数 or PositiveNumber//负数 PositiveNumber = DecimalNumber or DecimalNumber . Digits or DecimalNumber . Digits ExponentPart or DecimalNumber ExponentPart DecimalNumber = 0 //0 or OneToNine Digits // 1-9 ExponentPart = e Exponent or E Exponent Exponent = Digits or + Digits or - Digits Digits = Digit or Digits Digit Digit = 0 through 9//0-9 OneToNine = 1 through 9//1-9
JSONString
JSONString = "" or " StringCharacters " StringCharacters = StringCharacter or StringCharacters StringCharacter StringCharacter = any character except " or or U+0000 through U+001F or EscapeSequence //任意字符,除了 " 或者 或者 U+0000 - U+001F 或者 转义序列 EscapeSequence = " or / or \ or or f or or or or u HexDigit HexDigit HexDigit HexDigit // " 或者 / 或者 \ 或者 或者 f 或者 或者 或者 或者 u HexDigit HexDigit HexDigit HexDigit 16进制数字 HexDigit = 0 through 9//0-9 or A through F //A-F or a through f //a-f
JSONObject
JSONObject = { } or { Members } Members = JSONString : JSON or Members , JSONString : JSON
JSONArray
JSONArray = [ ] or [ ArrayElements ] //数组元素 ArrayElements = JSON or ArrayElements , JSON
无效的空格可能存在于JSONNumber
(数字必须不包含空格)或JSONString
(其中它被解释为字符串中的相应字符,否则将导致错误)之外的任何位置。
制表符(U+0009),回车(U+000D),换行(U+0020)和空格(U+0020)字符是唯一有效的空格字符。
参考:
mdn: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/JSON