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。

← 返回所有工具