如何在线验证JSON:开发者实用指南与示例
学习如何轻松验证、格式化和调试JSON。常见错误、与XML的区别、最佳实践和免费在线工具。
什么是JSON,为什么需要验证
JSON(JavaScript Object Notation)是现代Web开发中最广泛使用的数据交换格式。几乎所有REST API都以JSON格式返回数据,package.json和tsconfig.json等工具配置文件使用此格式,MongoDB等数据库也以JSON格式存储文档。
问题在于,一个错位的字符(多余的逗号、缺少的引号、未关闭的括号)就会使整个JSON无效并导致应用程序出错。API响应中的无效JSON会破坏前端。tsconfig.json中的语法错误会阻止TypeScript编译。
在使用前验证JSON可以避免数小时的调试。使用NexTools JSON验证器,你可以粘贴任何JSON,查看带有精确行号的错误,并自动获得格式化输出。
JSON基本语法:必须了解的规则
JSON有严格的语法规则。违反任何一条都会产生无效的JSON:
- 键必须用双引号括起来:
{"name": "Ana"}有效。{name: "Ana"}无效。 - 字符串使用双引号,不能用单引号:
"value"有效。'value'无效。 - 不允许尾随逗号:
{"a": 1, "b": 2}有效。{"a": 1, "b": 2,}无效。 - 不允许注释:JSON中不能使用//或/* */。
- 数字不带引号:
{"age": 25}有效。{"age": "25"}可以工作但值是字符串而非数字。
JSON中允许的数据类型:
| 类型 | 示例 | 说明 |
|---|---|---|
| String | "你好世界" | 始终使用双引号 |
| Number | 42、3.14、-7 | 整数或小数,不带引号 |
| Boolean | true、false | 小写,不带引号 |
| Null | null | 小写,不带引号 |
| Array | [1, 2, 3] | 逗号分隔的值 |
| Object | {"key": "value"} | 键值对 |
JSON中最常见的10个错误
这些是你在使用JSON时最常遇到的错误:
- 最后一个元素后的逗号:
{"items": [1, 2, 3,]}— 3后面的逗号无效。 - 使用单引号而非双引号:
{'name': '张三'}— 应为{"name": "张三"}。 - 键没有引号:
{age: 30}— 应为{"age": 30}。 - 未转义的控制字符:
字符串中的制表符和换行符必须写成\t和\n。 - 字符串中未转义的引号:
{"text": "他说"你好""}— 需要转义。 - 注释:
JSON不支持任何形式的注释。 - NaN、Infinity或undefined:
这些JavaScript值在JSON中无效。请使用null代替。 - 十六进制值:
{"color": 0xFF0000}无效。使用{"color": "#FF0000"}。 - 类型化数组中混合类型:
[1, "二", true]是有效JSON,但许多API期望同质数组。 - BOM(字节顺序标记):
某些编辑器在文件开头添加不可见字节,使JSON无效。始终保存为无BOM的UTF-8。
所有这些错误都会被JSON验证器自动检测,它会显示每个错误的精确行和位置。
如何格式化和压缩JSON
JSON可以两种方式呈现:格式化(pretty-print)便于人类阅读,压缩版便于高效传输。
格式化的JSON:
{
"user": {
"name": "小明",
"age": 28,
"active": true
}
}
压缩的JSON(相同数据,更少字节):
{"user":{"name":"小明","age":28,"active":true}}
压缩版占用更少空间(适合API和存储),而格式化版更容易阅读和调试。
在JavaScript中:
JSON.stringify(data, null, 2) // 2个空格缩进格式化
JSON.stringify(data) // 压缩
压缩大型JSON文件请使用代码压缩工具,它可以处理JSON、CSS和JavaScript。
JSON vs XML:何时使用哪个
在JSON之前,XML是数据交换的主流格式。两者仍在使用,但用途不同:
| 特性 | JSON | XML |
|---|---|---|
| 可读性 | 更简洁 | 更冗长 |
| 大小 | 小30-50% | 更大 |
| 数据类型 | String、Number、Boolean、Null、Array、Object | 一切都是文本 |
| 注释 | 不支持 | 支持 |
| Schema | JSON Schema | XSD、DTD |
| 主要用途 | REST API、配置 | SOAP、文档、RSS |
| 解析 | 原生JSON.parse() | 需要XML解析器 |
2026年,JSON在Web开发、API和移动应用中占主导地位。XML在遗留企业系统、RSS/Atom订阅源和DOCX等文档格式中继续使用。
日常使用JSON的工具
除了验证,这些辅助工具使工作更轻松:
- JSON验证器:检查语法,显示带行号的错误,自动格式化。
- 代码压缩器:通过删除空白和换行来压缩JSON。
- Base64编码器:将JSON编码为Base64以在URL或HTTP头中传输。
- 文本比较器:比较两个JSON版本以查找差异。
在浏览器中:
JSON.parse(jsonString)— 将JSON字符串转换为JavaScript对象。如果JSON无效则抛出错误。JSON.stringify(obj, null, 2)— 将对象转换为格式化的JSON。
JSON Schema:验证结构而非仅仅语法
语法验证只检查JSON是否格式正确。但在实际应用中,你还需要验证数据是否具有正确的结构。
这就是JSON Schema的作用——一种描述JSON文档结构的标准:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"required": ["name", "age", "email"],
"properties": {
"name": { "type": "string", "minLength": 1 },
"age": { "type": "integer", "minimum": 0, "maximum": 150 },
"email": { "type": "string", "format": "email" }
}
}
使用这个schema,你可以自动验证任何用户JSON是否包含name(非空字符串)、age(0到150之间的整数)和email(有效格式)。Ajv(JavaScript)、jsonschema(Python)和Newtonsoft(.NET)等库实现了JSON Schema验证。
生产环境中使用JSON的最佳实践
这些做法将帮助你避免实际项目中的常见问题:
- 始终验证来自外部源的JSON:来自API、用户上传文件或webhook的任何JSON在处理前都应在try-catch中通过
JSON.parse()。 - 键使用camelCase:这是JavaScript/TypeScript的标准惯例。用
userName而不是user_name。 - 避免超过3-4层嵌套:深度嵌套的JSON难以阅读、遍历和维护。
- 不要在未加密的JSON中存储敏感数据:令牌、密码和私钥永远不应出现在日志或API响应的明文JSON中。
- 使用null而非省略可选字段:
{"middleName": null}比省略该字段更好。 - 优雅地处理解析错误:不要向最终用户显示JSON.parse的原始错误。在内部记录日志并显示友好的消息。
试试这个工具:
打开工具→常见问题
为什么我的JSON在解析时显示'Unexpected token'
「Unexpected token」错误意味着JSON.parse遇到了意外字符。最常见的原因是:使用单引号而非双引号、最后一个元素后有逗号、JSON中有注释、或文件开头有不可见的BOM字符。将你的JSON粘贴到在线验证器中,查看错误的确切位置。
JSON文件中可以使用注释吗
不可以。JSON规范不允许任何形式的注释(既不能用//也不能用/* */)。如果需要带注释的JSON,可以使用JSONC(VS Code在settings.json中使用)、JSON5或YAML等替代格式。
JSON和JavaScript对象有什么区别
JavaScript对象可以有不带引号的键、函数作为值、undefined、Symbol和尾随逗号。JSON更严格:所有键必须有双引号,只允许string、number、boolean、null、array和object作为值,不允许尾随逗号和注释。
浏览器中处理多大的JSON算太大
大多数现代浏览器可以毫无问题地解析50-100MB的JSON。超过这个范围,解析可能会阻塞主线程并冻结界面。对于非常大的JSON,使用流式解析器如JSONStream或在服务器端处理数据。
如何将JSON转换为CSV或反之
JSON转CSV:如果JSON是具有相同键的对象数组,键成为列,每个对象成为一行。CSV转JSON:每行成为以表头为键的对象。可以用JavaScript编程实现或使用在线工具。
配置文件用JSON还是YAML更好
取决于使用场景。JSON更严格(歧义错误更少)、解析更快,是API的标准。YAML对人更可读、支持注释,在DevOps中流行(Docker Compose、GitHub Actions、Kubernetes)。对于人编辑的配置,YAML通常更好。对于机器间传输的数据,JSON是标准选择。