JSON 工具箱
📖 教程 · 预计阅读:8 分钟

JSON 是什么?一文读懂 JSON 格式

从零开始理解 JSON:语法规则、数据类型、应用场景和最佳实践

什么是 JSON?

JSON(JavaScript Object Notation,JavaScript 对象表示法)是一种轻量级的数据交换格式。它基于 JavaScript 的一个子集,但因其语言无关性,几乎被所有现代编程语言所支持。

JSON 的设计目标是易于人类阅读和编写,同时也易于机器解析和生成。自 2001 年由 Douglas Crockford 推广以来,JSON 已迅速取代 XML,成为互联网上最主流的数据交换格式。

JSON 的语法规则

JSON 的语法非常简单,只有六种规则:

  • 数据使用 键值对(key/value)表示
  • 键名必须使用双引号包裹
  • 不同数据之间用逗号分隔
  • 花括号 {} 表示对象
  • 方括号 [] 表示数组
  • 值可以是字符串、数字、布尔值、null、对象或数组

一个完整的 JSON 示例:

{
  "name": "JSON 工具箱",
  "version": "1.0.0",
  "free": true,
  "users": 0,
  "features": ["格式化", "校验", "压缩", "对比"],
  "author": null,
  "metadata": {
    "published": true,
    "tags": ["工具", "开发", "效率"]
  }
}

JSON 的数据类型详解

JSON 支持六种数据类型:

1. 字符串(String)

字符串必须用双引号包裹,支持转义字符(如 \"\n\\)。与 JavaScript 不同,JSON 不支持单引号或模板字符串。

{ "message": "Hello, \"世界\"!\n下一行" }

2. 数字(Number)

JSON 中的数字可以是整数或浮点数,支持科学计数法。注意:JSON 中不区分整数和浮点数,也没有 NaN 或 Infinity。

{
  "integer": 42,
  "float": 3.14,
  "scientific": 1.5e10
}

3. 布尔值(Boolean)

只有两个值:truefalse,且必须小写。

{ "isActive": true, "isVerified": false }

4. null

表示空值或无值,必须小写。与 undefined 不同,null 是 JSON 中表示"无"的唯一方式。

{ "middleName": null }

5. 对象(Object)

由花括号包裹的键值对集合。键必须是字符串(用双引号),值可以是任意数据类型。对象可以嵌套。

{
  "user": {
    "name": "Alice",
    "profile": {
      "age": 28,
      "email": "alice@example.com"
    }
  }
}

6. 数组(Array)

由方括号包裹的有序列表。数组可以包含任意数据类型的值,甚至可以混合不同类型。

{
  "mixed": [1, "two", true, null, { "key": "value" }],
  "users": ["Alice", "Bob", "Charlie"]
}

JSON 的常见应用场景

API 数据交换

JSON 是 RESTful API 和 GraphQL 中最主流的数据格式。前端通过 HTTP 请求从后端获取 JSON 数据并渲染到页面上。

// API 响应示例
GET /api/users/1
Response:
{
  "id": 1,
  "name": "Alice",
  "email": "alice@example.com",
  "orders": [
    { "id": 1001, "total": 29.99 },
    { "id": 1002, "total": 49.99 }
  ]
}

配置文件

许多现代工具和框架使用 JSON 作为配置文件格式,如 package.json(npm)、tsconfig.json(TypeScript)、manifest.json(Chrome 扩展)等。

数据存储

NoSQL 数据库(如 MongoDB)直接使用类 JSON 格式(BSON)存储数据。浏览器端的 localStorage 也常使用 JSON.stringify() 和 JSON.parse() 来存取结构化数据。

前端状态管理

在 JavaScript 应用中,组件状态、Redux/Vuex 的状态树都是以 JSON 对象的形式存在和流转的。

JSON 的常见误区与规范

误区一:键名可以不加引号

在 JavaScript 中对象键可以省略引号,但在 JSON 中必须使用双引号。这是最常见的 JSON 格式错误。

// ❌ 错误
{ name: "Alice", age: 28 }

// ✅ 正确
{ "name": "Alice", "age": 28 }

误区二:可以使用注释

JSON 官方规范不支持注释。如果需要说明字段含义,可以在数据结构中加入 description 字段,或使用 JSON Schema。

误区三:最后一项可以加逗号

JSON 不允许结尾逗号(trailing comma),这与 JavaScript 不同。

// ❌ 错误
{ "a": 1, "b": 2, }

// ✅ 正确
{ "a": 1, "b": 2 }

误区四:数字可以有前导零

JSON 中的数字不允许前导零(例如 0100.5 是无效的)。

JSON 与 JSON Schema

JSON Schema 是一种基于 JSON 自身格式定义的验证语言,用于描述 JSON 数据的结构和约束。它类似于 XML Schema 对 XML 的作用。

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "name": { "type": "string", "minLength": 1 },
    "age": { "type": "integer", "minimum": 0, "maximum": 150 },
    "email": { "type": "string", "format": "email" }
  },
  "required": ["name", "email"]
}

JSON 的优缺点

优点

  • 简洁轻量:语法简单,数据体积小,传输效率高
  • 可读性强:结构清晰,易于人工阅读和调试
  • 语言无关:几乎所有语言都有成熟的 JSON 解析库
  • 解析速度快:相比 XML,JSON 的解析效率更高
  • 原生支持:JavaScript 提供 JSON.parse()JSON.stringify() 原生方法

局限

  • 不支持注释:不便于在文件中做说明
  • 没有日期类型:日期通常用 ISO 8601 字符串表示,需要开发者自行约定
  • 没有二进制类型:二进制数据需要编码为 Base64 字符串
  • 不支持循环引用:无法表示图状数据结构

总结

JSON 以其极致的简洁性和广泛的兼容性,成为了当今互联网数据交换的事实标准。无论是 Web 开发、移动应用、微服务通信还是物联网设备,JSON 都在其中扮演着重要角色。

掌握 JSON 的语法规范和使用技巧,对每一位开发者来说都是基础且重要的技能。你可以使用 JSON 工具箱 来格式化、校验和处理你的 JSON 数据,提高日常开发效率。