JSON 解析器
JSON(JavaScript 对象表示法)是 Web API 和配置文件的标准数据交换格式。此工具解析、验证和美化 JSON,提供交互式树视图用于探索嵌套结构。支持在 JSON 与 YAML、TOML 等格式之间转换。
规范
常见用例
- 格式化压缩的 API 响应用于调试
- 在部署前验证 JSON 配置文件
- 将 API 响应转换为 YAML 用于文档
- 探索来自 NoSQL 数据库的深层嵌套数据结构
- 为 Postman 或 curl 等 API 测试工具准备 JSON 载荷
功能
- 验证 JSON 语法,提供清晰的错误消息和行号
- 使用 2 空格缩进美化
- 压缩 JSON 用于紧凑存储或传输
- 转换为 YAML、TOML 或 XML 格式
- 带可折叠节点的交互式树视图
- 复制单个值或子树
示例
API Response
试试看 →A typical REST API response with nested objects and arrays.
{
"users": [
{
"id": 1,
"name": "Alice",
"email": "alice@example.com"
},
{
"id": 2,
"name": "Bob",
"email": "bob@example.com"
}
],
"total": 2
}Application Configuration
试试看 →Nested configuration with database and cache settings.
{
"database": {
"host": "localhost",
"port": 5432,
"name": "myapp"
},
"cache": {
"enabled": true,
"ttl": 3600
}
}提示
- JSON 键必须是双引号字符串。单引号不合法。
- 标准 JSON 中不允许在最后一个元素后加尾随逗号。
- 对于带注释的 JSON,请改用 JSONC 解析器。
理解 JSON 解析器
JSON(JavaScript 对象表示法)是现代 Web 的通用数据交换格式。由 RFC 8259 和 ECMA-404 定义,JSON 使用六种类型表示结构化数据:字符串、数字、布尔值、null、数组和对象。其简洁性以及与几乎所有编程语言中数据结构的直接映射,使其成为 REST API、配置文件、文档数据库和服务间通信的默认格式。
JSON 的语法是 JavaScript 对象字面量表示法的严格子集,但有重要限制:键必须是双引号字符串,不允许尾随逗号,不支持注释。这些约束确保了跨实现的无歧义解析。有效的 JSON 文档必须以对象或数组作为根元素(虽然 RFC 8259 技术上允许任何 JSON 值作为顶级元素,但大多数 API 期望对象或数组)。
在 Web 开发中,JSON 是 REST 和 GraphQL API 的标准请求和响应格式。浏览器提供原生的 JSON.parse() 和 JSON.stringify() 方法,fetch API 包含一个 .json() 便捷方法。Node.js、Python(Flask、Django)、Go 和其他语言的服务器框架都包含内置的 JSON 序列化。MongoDB、CouchDB 和 DynamoDB 等文档数据库以 JSON 或类 JSON 格式(MongoDB 使用 BSON)原生存储数据。
JSON 的局限性催生了多个扩展和替代方案:JSONC 为配置文件添加注释,JSON5 放宽语法规则,JSON Lines(JSONL/NDJSON)每行一个 JSON 对象用于流式处理,JSON Schema 提供验证 JSON 文档结构的词汇。对于二进制效率,BSON、MessagePack 和 CBOR 等格式提供紧凑的 JSON 兼容序列化。尽管有这些替代方案,由于其通用的工具支持和人类可读性,纯 JSON 仍然是占主导地位的格式。
JSON 有意不支持注释。Douglas Crockford 推广了该格式,他排除注释以保持简洁并防止其被滥用于解析指令(如 XML 中发生的那样)。对于需要行内文档的配置文件,JSONC(带注释的 JSON)被 VS Code、TypeScript 和 ESLint 等工具原生支持。YAML 和 TOML 也是强有力的替代方案,适用于配置文件需要注释、多行字符串或清晰段标题的场景。
尽管 JSON 起源于 JavaScript,但它与 JavaScript 对象字面量并不相同。JSON 强制执行严格的语法规则:所有键必须双引号,只允许双引号字符串,禁止尾随逗号,undefined 和函数等值无法表示。JSON.parse() 将 JSON 字符串转换为 JavaScript 对象,而 JSON.stringify() 将对象序列化回 JSON 字符串。并非所有 JavaScript 对象都能通过 JSON 往返——包含函数、undefined、Infinity 或循环引用的对象在序列化过程中会丢失数据或抛出错误。
对于大于几兆字节的 JSON 文件,一次性将整个文档加载到内存中可能导致性能问题。流式解析器——如 JavaScript 的 SAX 风格库 clarinet 和 oboe.js,或 Python 的 ijson——增量处理文档而不缓冲整个结构。JSON Lines(JSONL)格式中每行是一个单独的 JSON 对象,非常适合大数据集,因为记录可以逐个处理。返回大量响应的 API 应实现分页以保持单个响应大小可管理。在 JSON 和其他格式之间选择时,JSON 是 API 通信和数据交换的最安全默认选择,因为每种语言和工具都无需额外依赖即可支持它。YAML 适用于人类编辑的配置,如 Kubernetes 清单和 CI/CD 管道。TOML 最适合受益于显式段标题和简单键值对的应用程序配置,如 Cargo.toml 和 pyproject.toml。