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+ 小伙伴加入学习 ,欢迎点击围观

前言

在当今互联网时代,数据交换与传输是软件开发的核心需求之一。JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,凭借其简洁性、可读性和跨语言兼容性,已成为开发者必备的技能之一。无论是构建 API、存储配置信息,还是处理前端与后端的通信,JSON 都是不可或缺的工具。本教程将通过循序渐进的方式,帮助编程初学者和中级开发者掌握 JSON 的核心概念、语法规范及实际应用场景,并通过代码示例和类比解释,让抽象概念变得直观易懂。


JSON 的基本语法:结构与数据类型

什么是 JSON?

JSON 是一种基于文本的数据格式,它通过键值对(Key-Value)的结构组织数据。可以将其想象为一种“数字化的快递单”:

  • 键(Key):类似快递单上的收件人姓名,标识数据的类别(如 "name")。
  • 值(Value):对应具体的数据内容(如 "John"30)。

JSON 的语法简洁,支持多种数据类型,且易于被机器解析和人类阅读。


核心语法结构

JSON 的基本结构有两种:对象(Object)数组(Array)

1. 对象(Object)

对象由键值对组成,用大括号 {} 括起,键名必须用双引号包裹,值可以是字符串、数字、布尔值、对象或数组。
示例

{
  "name": "Alice",
  "age": 28,
  "is_student": false,
  "scores": [90, 85, 95],
  "address": {
    "city": "Beijing",
    "country": "China"
  }
}

2. 数组(Array)

数组由多个值组成,用方括号 [] 括起,元素之间用逗号分隔,支持嵌套对象或数组。
示例

[
  {"id": 1, "title": "JavaScript 教程"},
  {"id": 2, "title": "Python 入门指南"}
]

支持的数据类型

JSON 支持以下数据类型:

数据类型描述示例
String字符串,用双引号包裹"Hello, World!"
Number数字(整型或浮点型)423.14
Boolean布尔值,仅允许 truefalse(区分大小写)true
Null空值,表示“无数据”null
Object键值对集合,用 {} 定义见上文对象示例
Array有序的值列表,用 [] 定义见上文数组示例

常见错误与注意事项

  • 键名必须用双引号包裹:单引号会导致解析失败。
  • 逗号不能多余或缺失:末尾的键值对或数组元素后不能有逗号(称为“尾逗号”)。
  • 特殊字符需转义:如双引号 " 需用反斜杠 \ 转义,例如 "He said: \"Hello\""

JSON 的解析与生成:代码实战

解析 JSON 到编程语言对象

不同编程语言提供了内置或第三方库来解析 JSON。以下以 JavaScript、Python 和 Java 为例:

JavaScript(内置 JSON 对象)

// 将 JSON 字符串转为对象  
const jsonStr = '{"name": "Bob", "score": 90}';  
const obj = JSON.parse(jsonStr);  
console.log(obj.name); // 输出 "Bob"  

// 将对象转为 JSON 字符串  
const newObj = {id: 3, title: "进阶教程"};  
const jsonString = JSON.stringify(newObj);  
console.log(jsonString); // 输出 '{"id":3,"title":"进阶教程"}'  

Python(使用 json 模块)

import json  

json_str = '{"city": "Shanghai", "population": 24150000}'  
data = json.loads(json_str)  
print(data["city"])  # 输出 "Shanghai"  

new_dict = {"price": 19.99, "currency": "USD"}  
json_output = json.dumps(new_dict, indent=2)  # indent 参数用于格式化输出  
print(json_output)  

Java(使用 org.json 库)

import org.json.JSONObject;  

public class Main {  
    public static void main(String[] args) {  
        // 解析 JSON  
        String jsonStr = "{\"status\": \"success\", \"code\": 200}";  
        JSONObject obj = new JSONObject(jsonStr);  
        System.out.println(obj.getInt("code"));  // 输出 200  

        // 生成 JSON  
        JSONObject newObj = new JSONObject();  
        newObj.put("name", "JSON 教程");  
        newObj.put("pages", 100);  
        System.out.println(newObj.toString());  // 输出 {"name":"JSON 教程","pages":100}  
    }  
}  

进阶技巧:处理嵌套与复杂结构

JSON 的强大之处在于其支持嵌套结构,开发者可通过多层键访问深层数据。

示例场景:解析一个包含用户信息和订单的 JSON 数据:

{  
  "user": {  
    "id": 101,  
    "name": "Charlie",  
    "orders": [  
      {"order_id": "ORD-001", "amount": 150},  
      {"order_id": "ORD-002", "amount": 200}  
    ]  
  }  
}  

JavaScript 中的访问方式

const data = JSON.parse(jsonStr);  
console.log(data.user.orders[1].amount); // 输出 200  

JSON 的实际应用场景

场景 1:API 数据交互

当后端服务返回用户列表时,JSON 是最常用的响应格式。例如,一个天气 API 的响应可能如下:

{  
  "location": "Tokyo",  
  "temperature": 22.5,  
  "forecast": {  
    "today": "sunny",  
    "tomorrow": "cloudy"  
  }  
}  

前端可通过 fetchaxios 解析并展示数据:

fetch("https://api.weather.com/tokyo")  
  .then(response => response.json())  
  .then(data => console.log(`当前温度:${data.temperature}℃`));  

场景 2:配置文件存储

JSON 常用于存储应用程序的配置信息,因其结构清晰且易于修改。例如,一个 Web 应用的配置文件可能如下:

{  
  "server": {  
    "host": "localhost",  
    "port": 3000  
  },  
  "database": {  
    "url": "mongodb://localhost:27017",  
    "name": "myapp"  
  }  
}  

场景 3:跨平台数据共享

由于 JSON 是语言无关的格式,它成为跨平台协作的理想选择。例如,一个 React 前端与 Java 后端可通过 JSON 交换数据:

// Java 后端生成 JSON  
JSONObject response = new JSONObject();  
response.put("status", "ready");  
response.put("data", Arrays.asList("apple", "banana"));  

// React 前端接收并渲染  
const [items, setItems] = useState([]);  
useEffect(() => {  
  fetch('/api/data')  
    .then(res => res.json())  
    .then(data => setItems(data.data));  
}, []);  

进阶技巧与最佳实践

1. 数据验证与格式化

在解析 JSON 前,应确保数据的合法性。可通过以下方式增强安全性:

  • 验证工具:使用 jsonlint.com 在线工具检查 JSON 语法。
  • 类型校验:在代码中添加类型检查(例如,确保 age 是数字而非字符串)。

2. 性能优化

  • 避免深层嵌套:过深的层级可能导致访问效率降低。
  • 压缩传输数据:在 HTTP 响应头中设置 Content-Encoding: gzip 压缩 JSON 数据。

3. 工具与库推荐

  • VS Code 插件JSON Tools 可实时验证和格式化 JSON。
  • 在线编辑器JSON Editor Online 支持可视化编辑和调试。

结论

JSON 作为现代软件开发中的“通用语言”,其简洁性和灵活性使其成为开发者的核心技能之一。通过本教程,读者应已掌握 JSON 的基础语法、解析方法及实际应用场景。无论是构建 API、配置系统,还是处理跨平台数据,JSON 都能提供高效且直观的解决方案。

建议读者通过以下方式进一步提升技能:

  1. 动手练习:尝试用不同语言解析和生成 JSON。
  2. 阅读文档:深入学习各语言的 JSON 相关库(如 Python 的 jsonschema)。
  3. 参与项目:在实际项目中应用 JSON,如开发一个简易的天气查询工具。

掌握 JSON 将为你的编程之路打下坚实的基础,助你更从容地应对复杂的数据交互场景。


(全文约 1800 字)

最新发布