JSON 验证通不过,八成是基础格式出了问题。最常见的就是逗号用错 —— 很多人在最后一个键值对后面还加逗号,比如
{"name":"张三","age":25,},这种情况在线工具一检测就会报错。你想想,JSON 格式里最后一个元素后面是不能有逗号的,就像写句子不能在句号前多画个逗号一样。{,结尾却写成了中括号];或者括号数量对不上,比如三层嵌套只关了两层。这种错误用肉眼很难发现,这时候在线工具就派上用场了。拿 JSONLint 举例,你把代码粘贴进去,它会直接标红错误位置,旁边还会提示 “缺少闭合括号”,跟着提示找对应位置就行。",不能用单引号'。比如{'name':'张三'}这种写法,看着没问题,但验证肯定失败。有些在线工具比如JSON.cn会更贴心,检测到单引号时会自动提示 “请使用双引号”,甚至能一键替换,新手可以优先用这种工具。处理带特殊字符的 JSON 数据时,很多人会栽跟头。比如字符串里有换行符、制表符,或者包含
" \这些符号。之前有个同事在 JSON 里写地址 “北京市朝阳区 XX 路 100 号 \n 邮编 100000”,结果验证时一直报错,后来才发现是\n没转义。\。比如换行符写成\n,制表符写成\t,双引号写成\"。在线工具怎么帮你查这个?用 JSON Formatter & Validator 试试,粘贴代码后如果有未转义的特殊字符,它会在错误提示里写 “无效的控制字符”,还会把具体位置标出来。你只需要在对应字符前加\就行。JSON 对数据类型要求特别严,但很多新手总搞混。比如把数字写成字符串 ——
{"age":"25"},这里 age 应该是数字,却用双引号包起来了。如果后端接口要求 age 必须是数字类型,这种 JSON 就算验证通过,传数据时还是会出错。"25",提示 “类型不匹配,期望 number 类型”。比普通验证工具更能防患于未然。true写成True或者"true",这在 JSON 里都是错的。记住,JSON 里的布尔值只能是小写的true或false,不带引号。用 JSONLint 检测时,它会直接提示 “无效的布尔值”,跟着改就行。处理复杂 JSON 时,嵌套结构最容易出错。比如数组里混了对象,或者对象里的数组格式不对。之前见过有人写
{"users":[{"name":"张三"},{"age":25}],这里 users 是数组,里面应该是对象,但第二个元素少了"name":,导致结构混乱。"name":就行。["a","b",],这种在 JSON 里是不允许的。JSON.cn的实时检测功能很有用,你一边写它一边提示,刚输入逗号就会弹出 “数组末尾不能有逗号”,不用等到写完再整体查。先说说最常用的 JSONLint(jsonlint.com)。打开网站后,把你的 JSON 代码粘贴到左侧输入框,右侧会自动显示结果。如果有错误,右侧会标红错误位置,下面有具体提示。比如提示 “第 3 行缺少闭合大括号”,你直接定位到第 3 行,在对应位置补个
}就行。改完后点 “Validate JSON”,显示 “Valid JSON” 就说明没问题了。{"type":"object","properties":{"name":{"type":"string"},"age":{"type":"number"}}};再在右侧 “JSON Instance” 里粘贴你的 JSON;点 “Validate” 后,不符合规则的地方会标红,比如 age 是字符串就会提示错误。别依赖自动修复功能。有些在线工具能一键修复简单错误,但复杂的嵌套错误可能越修越乱。最好还是自己看懂错误提示,手动修改,这样能避免二次错误。