JSON 语法(超详细)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观

前言

在现代编程领域,数据交换与存储是开发过程中不可或缺的环节。无论是构建 Web 应用、移动应用,还是处理 API 交互,一种轻量级、易于解析的数据格式至关重要。JSON 语法(JavaScript Object Notation)凭借其简洁性与跨语言兼容性,已成为开发者最常用的工具之一。

本文将从零开始,逐步解析 JSON 的核心语法、数据类型、嵌套结构,以及常见应用场景。通过实际案例与代码示例,帮助编程初学者快速掌握 JSON 的基本逻辑,同时为中级开发者提供进阶技巧与注意事项。


JSON 的基本结构与语法规范

1. JSON 的基础组成

JSON 的核心结构由两个主要元素构成:对象(Object)数组(Array)

  • 对象:用大括号 {} 包裹,由键值对(Key-Value Pair)组成,键和值通过冒号 : 分隔,多个键值对用逗号 , 分隔。
  • 数组:用方括号 [] 包裹,由值(Value)组成,多个值用逗号分隔。

示例:用户数据对象

{
  "name": "Alice",
  "age": 28,
  "is_student": false,
  "hobbies": ["reading", "coding", "traveling"]
}
  • name 是字符串类型,age 是数字类型,is_student 是布尔类型,hobbies 是数组类型。

2. 键值对的命名规则

  • 键(Key) 必须用双引号 " 括起,且不能包含特殊字符(如空格、逗号)。
  • 值(Value) 可以是字符串、数字、布尔值、数组、对象,或 null

常见错误示例

// 错误:键未用双引号包裹  
{ name: "Bob" }  
// 正确写法  
{ "name": "Bob" }  

JSON 的数据类型与格式化规则

1. 六种基本数据类型

JSON 支持以下六种数据类型:

类型描述示例值
字符串用双引号包裹的文本,支持 Unicode 字符。"Hello, World!"
数字整数或浮点数,不支持前导零或逗号分隔(如 0123 是非法的)。42, 3.14
布尔值表示真或假,值为 truefalse(全小写)。true, false
数组有序的值集合,用方括号包裹。[1, 2, 3]
对象键值对的无序集合,用大括号包裹。{"a": 1, "b": 2}
null表示空值或缺失数据,不带引号。null

2. 特殊字符的转义

JSON 对以下字符需要转义,避免语法冲突:

  • 双引号 "\"
  • 反斜杠 \\\
  • 回车 \r\r
  • 换行 \n\n

示例:包含换行的字符串

{
  "message": "第一行\n第二行"
}

JSON 的嵌套与复杂结构

1. 对象嵌套对象

通过嵌套对象,可以表示更复杂的层级关系。例如,描述一个家庭成员的结构:

{
  "family": {
    "father": {
      "name": "John",
      "age": 45
    },
    "mother": {
      "name": "Emma",
      "age": 42
    },
    "children": [
      {"name": "Lucas", "age": 8},
      {"name": "Sophia", "age": 5}
    ]
  }
}

2. 数组嵌套对象与数组

数组可以包含对象或嵌套数组,例如表示课程表的结构:

{
  "schedule": [
    {
      "day": "Monday",
      "classes": [
        {"subject": "Math", "teacher": "Mr. Smith"},
        {"subject": "History", "teacher": "Ms. Lee"}
      ]
    },
    {
      "day": "Tuesday",
      "classes": [
        {"subject": "Science", "teacher": "Dr. Brown"}
      ]
    }
  ]
}

JSON 的解析与生成实践

1. 解析 JSON 到编程语言对象

不同编程语言提供了原生或第三方库来解析 JSON。例如在 JavaScript 中:

const jsonString = `{
  "title": "JavaScript Guide",
  "pages": 500
}`;
  
const book = JSON.parse(jsonString);
console.log(book.title); // 输出:"JavaScript Guide"

2. 生成 JSON 字符串

通过编程语言的序列化功能,可以将对象转换为 JSON 格式。例如在 Python 中:

import json  

data = {
    "name": "Python",
    "version": 3.9,
    "is_popular": True
}
json_str = json.dumps(data, indent=2)
print(json_str)
// 输出:
// {
//   "name": "Python",
//   "version": 3.9,
//   "is_popular": true
// }

JSON 的实际应用场景与案例

1. Web API 数据交互

许多 RESTful API 返回 JSON 格式的数据。例如,请求用户信息的响应可能如下:

{
  "status": 200,
  "data": {
    "user_id": 1001,
    "profile": {
      "email": "user@example.com",
      "followers": 1500
    }
  }
}

2. 配置文件存储

JSON 常用于轻量级配置文件,例如前端框架的配置:

{
  "port": 3000,
  "environment": "development",
  "plugins": ["babel", "eslint"],
  "logging": {
    "level": "debug",
    "output": "console"
  }
}

3. 数据持久化

在移动端或桌面应用中,JSON 可用于存储用户偏好设置:

{
  "theme": "dark",
  "notifications": {
    "email": true,
    "push": false
  },
  "recent_searches": ["json", "api", "javascript"]
}

常见错误与最佳实践

1. 避免的陷阱

  • 未闭合的括号:漏写 }] 导致语法错误。
  • 非法键名:键未用双引号包裹或包含特殊字符。
  • 类型不匹配:例如将字符串 "123" 当作数字使用。

2. 代码规范建议

  • 使用缩进与换行提升可读性(如 indent=2)。
  • 对于复杂结构,采用工具(如 JSONLint)验证语法。
  • 在注释需求高的场景,考虑使用 JSON5(支持注释的扩展格式)。

结论

JSON 语法凭借其简洁性与跨平台特性,成为现代软件开发中的“通用语言”。从基础的键值对到复杂的嵌套结构,掌握 JSON 的核心规则能够显著提升数据处理与 API 开发的效率。无论是初学者构建第一个项目,还是中级开发者优化现有架构,理解 JSON 的逻辑与最佳实践都是迈向专业开发的关键一步。

通过本文的讲解与案例,读者可以快速将 JSON 应用于实际场景,例如配置文件管理、API 数据交互,以及跨语言数据共享。记住,实践是掌握 JSON 语法的最佳途径——尝试用 JSON 表达你熟悉的对象模型,逐步构建更复杂的结构。

最新发布