JSON 数据解析
文章目录
- [JSON 数据解析](#JSON 数据解析)
- [一、JSON 数据解析](#一、JSON 数据解析)
-
- [1.1 什么是 JSON?](#1.1 什么是 JSON?)
- [1.2 JSON 的基本语法格式](#1.2 JSON 的基本语法格式)
- [1.3 JSON 的语法规则](#1.3 JSON 的语法规则)
- [1.4 为什么要用 JSON?](#1.4 为什么要用 JSON?)
- 二、对比其他格式
- [三、Python 中的 `json` 模块](#三、Python 中的
json
模块) - 四、案例
-
- 案例1:基本读写与转换
- [案例2:文件操作(保存与读取 JSON)](#案例2:文件操作(保存与读取 JSON))
- [案例3:解析网络 JSON 响应(模拟接口返回)](#案例3:解析网络 JSON 响应(模拟接口返回))
- [案例4:复杂嵌套 JSON](#案例4:复杂嵌套 JSON)
- [五、JSON 总结](#五、JSON 总结)
一、JSON 数据解析
1.1 什么是 JSON?
JSON(JavaScript Object Notation) 是一种轻量级数据交换格式,常用于 Web 数据传输和配置文件。
它的结构与 Python 字典很相似。JSON 是一种用来表示和传输数据的文本格式。它以键-值对(key-value) 的方式来组织数据,非常类似于 Python 的字典(dict)或 JavaScript 的对象(object)
1.2 JSON 的基本语法格式
JSON 是纯文本,一般的结构如下:
json
{
"name": "Alice",
"age": 25,
"is_student": false,
"skills": ["Python", "C", "STM32"],
"address": {
"city": "Shanghai",
"zip": "200000"
}
}
1.3 JSON 的语法规则
- 数据以 键值对 形式出现(
"key": value
) - 键key必须用 双引号
- 值value可以是:
- 字符串(
"text"
) - 数字(
123
) - 布尔值(
true
/false
) - 数组(
[1, 2, 3]
) - 对象(
{...}
) null
- 字符串(
- 不能有注释(这点与 Python 不同)
- 最外层可以是对象
{}
或数组[]
1.4 为什么要用 JSON?
因为它具有以下几个优点 :
跨语言通用
JSON 是纯文本格式,不依赖任何编程语言。
无论是 Python、C++、Java、JavaScript、Go,都能轻松解析和生成 JSON。
这让不同系统之间的数据交换变得非常方便。
结构清晰、可读性强
JSON 数据简洁明了,人和机器都容易理解与编辑。
相比 XML,以前常用的数据格式,JSON 更短、更易解析。
易于解析与序列化
大多数语言都有内置的 JSON 库,比如 Python 的 json
模块
py
import json
# Python 对象转 JSON 字符串
data = {"name": "Alice", "age": 25}
json_str = json.dumps(data)
print(json_str)
# 输出:{"name": "Alice", "age": 25}
# JSON 字符串转 Python 对象
data2 = json.loads(json_str)
print(data2["name"])
# 输出:Alice
常用于前后端数据交互
例如:
- Web 页面(前端)与服务器(后端)之间的数据传输
- 移动 APP 与服务器接口
- 配置文件(如
config.json
) - 存储用户数据(如
users.json
) - API 数据返回(RESTful 接口)
二、对比其他格式
格式 | 可读性 | 数据体积 | 使用复杂度 | 应用场景 |
---|---|---|---|---|
JSON | 高 | 小 | 简单 | Web接口、配置文件 |
XML | 中 | 大 | 较复杂 | 老系统、文档格式 |
YAML | 高 | 小 | 易出错(缩进敏感) | 配置文件 |
CSV | 一般 | 小 | 结构单一 | 表格数据 |
简单说:**JSON 是一种轻量、通用、易读的数据交换格式,用于在不同系统之间传递结构化数据。
三、Python 中的 json
模块
Python 内置 json
模块可以实现:
json.dumps()
:Python 对象 → JSON 字符串json.loads()
:JSON 字符串 → Python 对象json.dump()
:Python 对象 → 写入 JSON 文件json.load()
:从 JSON 文件读取 → Python 对象
JSON 数据类型 | Python 对应类型 |
---|---|
object | dict |
array | list |
string | str |
number | int / float |
true / false | True / False |
null | None |
四、案例
案例1:基本读写与转换
py
import json
# Python 对象
data = {
"name": "Tom",
"age": 25,
"hobbies": ["reading", "coding", "music"],
"married": False
}
# Python → JSON 字符串(序列化)
json_str = json.dumps(data, indent=4, ensure_ascii=False)
print("JSON 字符串:\n", json_str)
# JSON → Python(反序列化)
parsed = json.loads(json_str)
print("Python 对象:", parsed)
print("名字:", parsed["name"])
输出
py
JSON 字符串:
{
"name": "Tom",
"age": 25,
"hobbies": [
"reading",
"coding",
"music"
],
"married": false
}
Python 对象: {'name': 'Tom', 'age': 25, 'hobbies': ['reading', 'coding', 'music'], 'married': False}
名字: Tom
参数说明:
indent=4
:缩进 4 个空格,美观打印ensure_ascii=False
:保留中文,保证中文正常显示,防止中文被转义成 \uXXXX
案例2:文件操作(保存与读取 JSON)
py
import json
user = {"username": "admin", "score": 99, "active": True}
# 写入 JSON 文件
with open("user.json", "w", encoding="utf-8") as f:
json.dump(user, f, ensure_ascii=False, indent=4)
# 读取 JSON 文件
with open("user.json", "r", encoding="utf-8") as f:
loaded_user = json.load(f)
print("从文件读取:", loaded_user)
输出
从文件读取: {'username': 'admin', 'score': 99, 'active': True}
案例3:解析网络 JSON 响应(模拟接口返回)
py
import json
response = '{"status":200,"data":{"city":"Beijing","temp":18.5}}'
data = json.loads(response)
print("城市:", data["data"]["city"])
print("温度:", data["data"]["temp"])
输出
城市: Beijing
温度: 18.5
案例4:复杂嵌套 JSON
py
import json
text = '''
{
"employees": [
{"name": "Alice", "age": 30},
{"name": "Bob", "age": 25},
{"name": "Charlie", "age": 28}
]
}
'''
obj = json.loads(text)
for emp in obj["employees"]:
print(f"{emp['name']} 的年龄是 {emp['age']}")
输出
Alice 的年龄是 30
Bob 的年龄是 25
Charlie 的年龄是 28
五、JSON 总结
功能 | 方法 | 说明 |
---|---|---|
序列化(Python → JSON) | json.dumps(obj) |
返回字符串 |
写入文件 | json.dump(obj, file) |
直接写入文件 |
反序列化(JSON → Python) | json.loads(str) |
解析字符串 |
读取文件 | json.load(file) |
从文件读取 JSON |
python学习专栏导航
(1)100天python从入门到拿捏《Python 3简介》
(2)100天python从入门到拿捏《python应用前景》
(3)100天python从入门到拿捏《数据类型》
(4)100天python从入门到拿捏《运算符》
(5)100天python从入门到拿捏《流程控制语句》
(6)100天python从入门到拿捏《推导式》
(7)100天python从入门到拿捏《迭代器和生成器》
(8)100天python从入门到拿捏《函数和匿名函数》
(9)100天python从入门到拿捏《装饰器》
(10)100天python从入门到拿捏《Python中的数据结构与自定义数据结构》
(11)100天python从入门到拿捏《模块》
(12)100天python从入门到拿捏《文件操作》
(13)100天python从入门到拿捏《目录操作》
(14)100天python从入门到拿捏《Python的错误与异常机制》
(15)100天python从入门到拿捏《面向对象编程》
(16)100天python从入门到拿捏《标准库》
(17)100天python从入门到拿捏《正则表达式》
(18)100天python从入门到拿捏《网络编程》
(19)100天python从入门到拿捏《多线程》