5月29日 01:08

JSON 的语法规则有哪些?哪些是容易踩坑的?

JSON 语法看似简单,但有几条规则与 JavaScript 对象字面量不同,容易踩坑。核心规则:键名必须用双引号包裹("name" 不能写成 name);字符串也只能用双引号,单引号非法;最后一个键值对后不能有尾逗号;不支持注释;值只能是 string、number、boolean、null、object、array 六种类型,不支持 undefined、Date、Function、RegExp。数字不支持前导零(01 非法)和 NaN/Infinity。字符串中的特殊字符需转义,如 \n\"\\。大小写敏感:只有小写的 truefalsenull 合法,TRUENull 都会解析失败。

追问

  • {"a": 1,} 在 JS 中合法但 JSON 非法,为什么 JSON 要禁止尾逗号?
  • JSON.parse('{"a": undefined}') 会怎样?undefined 在对象和数组中的序列化行为有何不同?
  • JSON 数字为什么不区分整数和浮点数?1e3 在 JSON 中合法吗?
  • 如何在 JSON 中表示二进制数据?Base64 编码有什么局限?
  • JSON.parse('123') 合法吗?JSON.parse('"hello"') 呢?最外层必须是对象吗?

写段代码

javascript
// 合法 JSON const a = JSON.parse('{"name":"Alice","age":25}'); // 非法:单引号键名 // JSON.parse("{'name':'Alice'}"); // SyntaxError // 非法:尾逗号 // JSON.parse('{"name":"Alice",}'); // SyntaxError // 合法:最外层不是对象 JSON.parse('123'); // 123 JSON.parse('"hi"'); // "hi"
标签:JSON