JSON 语法与格式:写错一个符号就报错
JSON 的语法规则一页纸就能写完,但真正写起来,报错往往出在一个逗号上。
六种值
字符串必须用双引号,数字不能加引号,布尔值是 true / false,空值是 null,再加上对象和数组。
就这些。没有日期、没有函数、没有 undefined。
对象和数组
对象是花括号包起来的键值对集合,键必须是双引号字符串,键和值之间用冒号,成员之间用逗号。
数组是方括号包起来的有序列表,元素可以是任意类型,包括另一个对象或数组。
嵌套没有层数限制,但实际接口里超过五六层就该考虑拆结构了。
字符串里的转义
双引号本身要写成 \",反斜杠写成 \\,换行写成 \n,制表符写成 \t。
直接在里面敲一个真实换行,是不合法的。很多人从别处复制多行文本贴进 JSON,报错就是这个原因。
中文可以直接写,UTF-8 编码支持。也可以写成 \u4e2d 这种 Unicode 转义,两种都合法。
五个高频错误
用单引号包字符串。JSON 只认双引号。
最后一个成员后面多写一个逗号。JavaScript 对象允许,JSON 不允许。
键没加引号。{name: "x"} 在 JS 里能跑,在 JSON 里是错的。
写注释。// 和 /* */ 都不合法。
数字格式不对。01、.5、1.、NaN 都不是合法 JSON 数字。
怎么快速定位
解析器一般会给出位置,比如“第 3 行第 15 列附近”。但嵌套很深时,人眼很难数。
把文本贴进 JSON 格式化工具,它会指出错误位置,也能把压缩成一行的内容展开。先格式化再改,比直接盯着原始字符串找错快很多。