Tutorial

什么是 JSON?

系统讲解 JSON 的语法规则、六大核心数据类型、JSON 与 XML 的差异,并提供 JavaScript/Python 实战示例。

2026-04-015 min read

什么是 JSON?

JSON 是 JavaScript Object Notation(JavaScript 对象表示法)的缩写,它是一种轻量级的数据存储和传输格式。JSON 的核心设计理念是让数据既易于人类阅读,又便于机器解析,这种双重特性使其成为现代 Web 开发中最重要的数据交换格式之一。

JSON 最初源于 JavaScript 语言,但它已经发展成为完全独立于编程语言的数据格式标准。无论是 Python、Java、PHP 还是 Ruby,几乎所有现代编程语言都原生支持 JSON 的读取和生成。这种跨平台的兼容性使 JSON 成为服务器与客户端之间、不同系统之间数据传输的首选格式。JSON 采用纯文本格式,这意味着它可以在任何支持文本处理的环境中传输和存储,无需依赖特定的软件或平台。

JSON 的"轻量级"特性体现在两个方面:首先,它的语法结构极其简洁,不包含任何冗余的标记或格式要求;其次,JSON 文件通常比同等数据的 XML 文件小 30%-50%,这在需要频繁传输大量数据的 Web 应用中能显著降低网络开销和加载时间。

JSON 的语法规则

JSON 的语法设计遵循严格的规则,这些规则确保了数据格式的一致性和可解析性。理解这些基本规则是正确使用 JSON 的基础。

基本语法结构

  • 键值对格式:JSON 数据由名称/值对组成,每个键值对用冒号分隔,如 "name": "John"
  • 双引号强制要求:所有的键名必须用双引号包裹,这是 JSON 与 JavaScript 对象的重要区别
  • 数据分隔符:多个键值对之间用逗号分隔,但最后一个键值对后面不能有逗号
  • 对象容器:花括号 {} 用于包裹对象,表示一个无序的键值对集合
  • 数组容器:方括号 [] 用于包裹数组,表示一个有序的值列表
  • 嵌套结构:对象和数组可以相互嵌套,形成复杂的数据层次结构

避坑指南:JSON 的常见错误

在实际开发中,开发者经常会遇到一些 JSON 格式的常见错误。以下是需要特别注意的"陷阱":

1. JSON 不支持注释

JSON 规范中明确不支持任何形式的注释。如果您在 JSON 文件中添加 ///* */ 格式的注释,解析器会直接报错。如果需要在 JSON 中包含说明性信息,可以考虑在数据中添加特殊的键,如 "_comment": "这是说明文字",但这种做法并不推荐用于生产环境。

2. 必须使用双引号,不能使用单引号

这是一个极其常见的错误。在 JavaScript 中,您可以使用单引号或双引号来定义字符串,但在 JSON 中,所有的字符串必须使用双引号。例如,{'name': 'John'} 是无效的 JSON,必须写成 {"name": "John"}

3. 最后一个元素后不能有逗号

在 JavaScript 中,对象或数组的最后一个元素后可以有一个可选的逗号,但在 JSON 中这是严格禁止的。{"name": "John",} 会导致解析错误,正确的格式是 {"name": "John"}

4. 键名必须是字符串

JSON 中所有的键必须是字符串类型,并且必须用双引号包裹。像 {age: 25} 这样的写法在 JavaScript 中是合法的,但在 JSON 中无效,必须写成 {"age": 25}

核心数据类型

JSON 支持六种核心数据类型,每种类型都有其特定的语法规则和用途。理解这些数据类型是正确构建 JSON 数据结构的关键。

String(字符串)

字符串是 JSON 中最常用的数据类型,用于表示文本信息。字符串必须用双引号包裹,可以包含任何 Unicode 字符。JSON 字符串支持常见的转义字符,如 \n(换行)、\t(制表符)、\"(双引号)等。

{
  "name": "张三",
  "email": "zhangsan@example.com",
  "address": "北京市朝阳区\n建国路88号"
}

Number(数字)

JSON 中的数字类型包括整数和浮点数,不支持八进制和十六进制格式。数字可以是正数、负数,也可以包含小数部分或使用科学计数法表示。

{
  "age": 28,
  "price": 99.99,
  "temperature": -5,
  "largeNumber": 3.14e10
}

Object(对象)

对象是无序的键值对集合,用花括号包裹。每个键值对中的键必须是字符串,值可以是任何合法的 JSON 数据类型。对象可以嵌套,形成复杂的数据结构。

{
  "user": {
    "profile": {
      "name": "李四",
      "age": 32
    },
    "preferences": {
      "theme": "dark",
      "language": "zh-CN"
    }
  }
}

Array(数组)

数组是有序的值列表,用方括号包裹。数组中的值可以是任何 JSON 数据类型,包括混合类型。数组特别适合表示集合数据,如用户列表、标签等。

{
  "users": ["Alice", "Bob", "Charlie"],
  "scores": [95, 87, 92, 88],
  "mixed": [1, "two", true, null]
}

Boolean(布尔值)

布尔值只有两个可能的值:truefalse。注意这些值是小写的,并且不需要引号包裹。

{
  "isActive": true,
  "hasPermission": false,
  "isPremium": true
}

Null(空值)

null 表示一个空值或不存在的值。它同样不需要引号包裹,且必须小写。

{
  "middleName": null,
  "avatar": null,
  "lastLoginTime": null
}

JSON vs XML

JSON 和 XML 都是用于数据存储和传输的格式,但它们在设计理念、语法结构和使用场景上存在显著差异。以下对比表帮助您快速理解两者的区别:

特性JSONXML
全称JavaScript Object NotationeXtensible Markup Language
文件大小更小,通常比 XML 小 30%-50%较大,需要闭合标签
可读性简洁清晰,易于阅读结构清晰但较为冗长
解析速度更快,可使用标准函数解析较慢,需要 XML 解析器
数据类型支持多种原生数据类型仅支持文本,需要自行定义类型
数组支持原生支持数组不支持数组概念
注释不支持注释支持注释
命名空间不支持支持命名空间
适用场景Web API、移动应用、配置文件企业级文档、复杂数据结构

选择建议:对于现代 Web 开发和移动应用,JSON 通常是更好的选择,因为它更轻量、解析更快、与 JavaScript 的天然兼容性更好。XML 则更适合需要复杂文档结构、命名空间支持或严格验证的企业级应用场景。

实战:如何在 JS/Python 中操作 JSON?

在实际开发中,最常用的 JSON 操作是将 JSON 字符串转换为程序中的对象,以及将对象转换为 JSON 字符串。以下是在 JavaScript 和 Python 中的具体实现方法。

JavaScript 中的 JSON 操作

JavaScript 提供了两个核心方法来处理 JSON 数据:JSON.parse()JSON.stringify()

1. JSON.parse() - 将 JSON 字符串转换为 JavaScript 对象

// JSON 字符串
const jsonString = '{"name": "张三", "age": 28, "city": "北京"}';

// 解析为 JavaScript 对象
const obj = JSON.parse(jsonString);

// 使用解析后的对象
console.log(obj.name);  // 输出: 张三
console.log(obj.age);   // 输出: 28

// 处理嵌套结构
const complexJson = '{
  "user": {
    "profile": {"name": "李四"},
    "skills": ["JavaScript", "Python"]
  }
}';
const data = JSON.parse(complexJson);
console.log(data.user.profile.name);      // 输出: 李四
console.log(data.user.skills[0]);          // 输出: JavaScript

2. JSON.stringify() - 将 JavaScript 对象转换为 JSON 字符串

// JavaScript 对象
const user = {
  name: "王五",
  age: 32,
  email: "wangwu@example.com",
  isActive: true
};

// 转换为 JSON 字符串
const jsonString = JSON.stringify(user);
console.log(jsonString);
// 输出: {"name":"王五","age":32,"email":"wangwu@example.com","isActive":true}

// 格式化输出(带缩进)
const prettyJson = JSON.stringify(user, null, 2);
console.log(prettyJson);
/* 输出:
{
  "name": "王五",
  "age": 32,
  "email": "wangwu@example.com",
  "isActive": true
}
*/

// 只包含特定属性
const filtered = JSON.stringify(user, ["name", "email"], 2);
console.log(filtered);
/* 输出:
{
  "name": "王五",
  "email": "wangwu@example.com"
}
*/

Python 中的 JSON 操作

Python 内置了 json 模块,提供了与 JavaScript 类似的功能。

1. json.loads() - 将 JSON 字符串转换为 Python 对象

import json

# JSON 字符串
json_string = '{"name": "张三", "age": 28, "city": "北京"}'

# 解析为 Python 字典
data = json.loads(json_string)

# 使用解析后的数据
print(data['name'])  # 输出: 张三
print(data['age'])   # 输出: 28

# 处理嵌套结构
complex_json = '''
{
  "user": {
    "profile": {"name": "李四"},
    "skills": ["JavaScript", "Python"]
  }
}
'''
data = json.loads(complex_json)
print(data['user']['profile']['name'])      # 输出: 李四
print(data['user']['skills'][0])            # 输出: JavaScript

2. json.dumps() - 将 Python 对象转换为 JSON 字符串

import json

# Python 字典
user = {
    "name": "王五",
    "age": 32,
    "email": "wangwu@example.com",
    "is_active": True,
    "skills": ["Python", "JavaScript", "Go"]
}

# 转换为 JSON 字符串
json_string = json.dumps(user)
print(json_string)
# 输出: {"name": "王五", "age": 32, "email": "wangwu@example.com", ...}

# 格式化输出(带缩进)
pretty_json = json.dumps(user, indent=2, ensure_ascii=False)
print(pretty_json)
""" 输出:
{
  "name": "王五",
  "age": 32,
  "email": "wangwu@example.com",
  "is_active": true,
  "skills": [
    "Python",
    "JavaScript",
    "Go"
  ]
}
"""

# 按键排序
sorted_json = json.dumps(user, sort_keys=True, indent=2)
print(sorted_json)

JSON 在现代开发中的重要性

根据 Oracle 和 DigitalOcean 的分析,JSON 在现代软件开发中扮演着不可替代的角色:

API 通信:几乎所有的现代 RESTful API 都使用 JSON 作为数据交换格式,因为它轻量、易解析,并且与 JavaScript 天然兼容。

数据库存储:NoSQL 数据库(如 MongoDB、Couchbase)原生支持 JSON 格式存储,主流的关系型数据库(如 Oracle、PostgreSQL、MySQL)也开始提供 JSON 数据类型支持,使开发者能够在关系型数据库中灵活地存储和查询 JSON 数据。

配置文件:越来越多的应用程序和开发工具采用 JSON 作为配置文件格式,包括 package.json(Node.js)、tsconfig.json(TypeScript)、.vscode/settings.json(VS Code)等,这是因为 JSON 的简洁性和可读性优于传统的 INI 或 XML 格式。


继续使用 JSON 工具

JSON Work 团队

致力于为开发者提供最佳的 JSON 处理工具

相关文章

更多文章即将发布...

返回博客

相关工具推荐

常见问题

关于跟进更新、选题方向与互动反馈。

如何第一时间看到新文章?

收藏本博客列表页,并在首页与工具聚合页留意指南入口。阅读文章无需注册或邮件订阅。

博客主要写什么?

围绕 JSON 校验、格式化、转换与调试流程,以及 JSON Work 工具更新,与在线工具的本地能力一一对应。

可以建议教程选题吗?

可以。请通过关于页的联系方式或 GitHub 反馈;我们会优先安排贴近真实开发场景的教程。

需要帮助?