如何在线校验 JSON 是否合法
什么样的 JSON 是合法的?
合法的 JSON 必须满足以下所有条件:整个文档是一个合法的 JSON 值(对象、数组、字符串、数字、布尔值或 null 之一);所有字符串(包括对象的键名)都用双引号括起来;没有多余的逗号(如数组或对象最后一个元素后的逗号);没有注释;括号/花括号完整配对;特殊字符已正确转义。
值得注意的是,合法的 JSON 与"有效的业务数据"是两回事——JSON 可以语法完全正确,但其中的字段值不符合业务规则(如年龄为负数),这需要 JSON Schema 验证来检查。
最常见的 JSON 语法错误
1. 末尾多余的逗号(Trailing Comma)— 这是最常见的错误,通常出现在从代码中复制 JSON 时:
// 错误 / Wrong:
{"name": "Alice", "age": 30,}
// 正确 / Correct:
{"name": "Alice", "age": 30}
2. 键名没有双引号(Unquoted Keys):
// 错误 / Wrong:
{name: "Alice"}
// 正确 / Correct:
{"name": "Alice"}
3. 使用了单引号:
// 错误 / Wrong:
{'name': 'Alice'}
// 正确 / Correct:
{"name": "Alice"}
字符串中的特殊字符转义
JSON 字符串中,以下字符必须用反斜杠转义:双引号 \";反斜杠 \\;正斜杠 \/(可选);换行符 \n;回车符 \r;制表符 \t;Unicode 字符 \uXXXX。
如果 JSON 字符串中包含未转义的特殊字符,会导致解析失败。例如,将多行文本存储为 JSON 字符串时,换行符必须转义为 \n,不能直接在字符串中包含实际换行。
在线验证工具的使用方法
- 打开在线 JSON 验证工具,将需要验证的 JSON 粘贴到输入区域。
- 工具通常在输入时实时进行验证,在编辑器中高亮显示有问题的部分。
- 如果 JSON 无效,查看错误提示:通常会显示"第 X 行第 Y 列出现意外的 token"等信息,定位到具体的错误位置。
- 根据错误信息修改对应位置,再次验证,直到通过。
- 验证通过后,工具通常会显示"Valid JSON",并可以选择进行格式化展示。
编程语言中的 JSON 验证
在代码中验证 JSON 最简单的方法是尝试解析它:
// JavaScript
function isValidJSON(str) {
try {
JSON.parse(str);
return true;
} catch (e) {
return false;
}
}
# Python
import json
def is_valid_json(s):
try:
json.loads(s)
return True
except json.JSONDecodeError:
return False
对于 JSON Schema 验证,各语言都有成熟的库:JavaScript 有 ajv;Python 有 jsonschema;Java 有 networknt/json-schema-validator;Go 有 santhosh-tekuri/jsonschema。
CI/CD 中的 JSON 验证自动化
在持续集成流水线中自动验证 JSON 文件是防止配置错误上线的有效手段。常见的 CI/CD JSON 验证方法:
- 使用
jq工具:jq . config.json > /dev/null && echo "Valid" || echo "Invalid" - 使用 Python:
python -m json.tool config.json > /dev/null - 在 Node.js 项目中,ESLint 和 JSON lint 插件可以在代码提交前检查 JSON 文件
- 对于需要业务逻辑验证的场景,编写自定义验证脚本结合 JSON Schema
JSONC 和 JSON5:带注释的 JSON 格式
标准 JSON 不支持注释,这对配置文件来说很不方便。为此出现了两种扩展格式:JSONC(JSON with Comments)是 VS Code 等工具使用的格式,在标准 JSON 基础上允许 // 和 /* */ 注释,文件后缀通常是 .jsonc;JSON5 是更宽松的超集,额外支持注释、单引号字符串、末尾逗号等,设计目标是让 JSON 更人性化。
注意:JSONC 和 JSON5 是非标准扩展,不能被标准 JSON 解析器直接解析,需要专门的解析库,不应用于 API 数据交换,只适合配置文件场景。
立即免费使用相关工具
免费使用 →