JSON验证器
检查您的JSON是否符合RFC 8259的语法要求。获取精确的错误信息,包括行和列号,以快速修复问题。
数组中最后一个元素后的尾随逗号是最常见的JSON错误 - 在压缩输出中肉眼无法看到。根据StackOverflow 2023年开发者调查分析,JSON解析错误占API调试时间的约15%。此验证器直接在您的浏览器中捕捉到这一点及其他所有RFC 8259违规行为。粘贴您的JSON以立即获得结果:有效或无效,并提供任何问题的确切行和列。没有数据被上传。无需帐户。
如何验证JSON
- 将您的JSON粘贴或输入到输入框中。
- 验证器实时检查语法,或单击验证以获取完整报告。
- 如果有效,绿色指示器将确认结构,并提供顶层类型的摘要。
- 如果无效,错误面板将显示确切的行、列以及问题的通俗描述。
- 修复指示的问题并重新验证,直到收到干净的结果。
检查内容
结构规则
JSON必须以对象({})或数组([])开头,尽管RFC 8259也允许原始值(字符串、数字、布尔值、null)作为顶层值。大括号和方括号必须平衡并正确嵌套。逗号必须分隔元素,但不能出现在最后一个元素之后 - 尾随逗号是最常见的JSON错误。每个对象键必须是双引号字符串。
值类型
JSON定义了六种值类型:字符串(双引号,带特定转义序列)、数字(整数和小数,无前导零)、布尔值(true和false,仅小写)、null(小写)、对象和数组。特定于JavaScript的值,如undefined、NaN、Infinity和函数表达式不是有效的JSON,将导致验证失败。
RFC 8259合规性
RFC 8259(发布于2017年12月,替代RFC 4627和RFC 7159)是当前的IETF JSON标准。它规定了UTF-8编码,禁止重复的对象键,并定义了字符串值的确切转义序列。此验证器强制执行严格的RFC 8259规则,以确保在所有解析器和语言中具有最大兼容性。
示例
无效输入(尾随逗号)
{
"name": "Alice",
"roles": ["admin", "editor",]
}
验证器错误
第3行,第33列:意外的标记']'
JSON数组中不允许有尾随逗号(RFC 8259 §5)。
常见语法错误
- 尾随逗号 -
{"a": 1,}- 在闭合大括号或方括号之前删除最后一个逗号 - 单引号字符串 -
{'key': 'value'}- 改为双引号 - 未加引号的键 -
{key: "value"}- 用双引号包裹键 - JavaScript注释 -
// comment或/* comment */- JSON没有注释语法;请删除它们 - 布尔值/null大小写不正确 -
True、False、NULL无效;使用true、false、null
验证与格式化的区别
验证检查JSON是否语法正确 - 它会通过或失败,并提供具体的错误细节。格式化仅添加空格以提高可读性,并不验证正确性。尝试格式化无效的JSON也会失败,因为格式化器必须先解析JSON。先验证,然后格式化。
一旦JSON通过验证,JSON格式化器会为可读性进行缩进,而JSON压缩器会为生产使用进行压缩。对于嵌入URL的JSON,在验证之前请使用URL解码器进行解码。
常见问题
JSON验证和格式化有什么区别?
验证检查您的JSON是否符合RFC 8259的语法规范。格式化仅添加空格以提高可读性,并不验证正确性。您可以尝试格式化无效的JSON,但格式化器也会失败,因为它必须先解析JSON。在格式化之前进行验证。
为什么JavaScript接受我的JSON,但验证器却拒绝?
一些JavaScript环境接受放宽的JSON超集,如JSON5或HJSON,这些超集允许注释、单引号字符串和尾随逗号。此验证器根据严格的RFC 8259进行测试,以确保JSON在所有语言和运行时中都能正常工作。如果您的用例仅限于JavaScript,请考虑使用JSON5.parse()和json5库。
我可以使用此工具验证JSON Schema文档吗?
此工具仅验证JSON语法,而不验证JSON Schema语义。JSON Schema文档本身是有效的JSON,因此语法验证有效。要验证数据对象是否符合JSON Schema定义,您需要专用的JSON Schema验证器,如ajv。
在这里验证时我的数据是私密的吗?
完全可以。验证在您的浏览器中客户端运行,使用本地的JSON.parse函数。没有数据发送到任何服务器,也不会被记录或存储。您可以安全地验证包含API凭证、个人信息或内部商业数据的有效负载。
最常见的JSON验证错误是什么?
按频率排序:(1) 最后一个元素后的尾随逗号 - [1, 2, 3,]; (2) 单引号字符串而非双引号; (3) 字符串内部未转义的反斜杠或控制字符; (4) JavaScript注释; (5) 大写的True/False/Null而非true/false/null。