(20)100天python从入门到拿捏《JSON 数据解析》

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 的语法规则

  1. 数据以 键值对 形式出现("key": value
  2. 键key必须用 双引号
  3. 值value可以是:
    • 字符串("text")
    • 数字(123
    • 布尔值(true/false
    • 数组([1, 2, 3]
    • 对象({...}
    • null
  4. 不能有注释(这点与 Python 不同)
  5. 最外层可以是对象 {} 或数组 []

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从入门到拿捏《多线程》

相关推荐
Java后端的Ai之路3 小时前
【Python 教程15】-Python和Web
python
冬奇Lab4 小时前
一天一个开源项目(第15篇):MapToPoster - 用代码将城市地图转换为精美的海报设计
python·开源
剩下了什么5 小时前
MySQL JSON_SET() 函数
数据库·mysql·json
灰子学技术6 小时前
go response.Body.close()导致连接异常处理
开发语言·后端·golang
二十雨辰6 小时前
[python]-AI大模型
开发语言·人工智能·python
Yvonne爱编码7 小时前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python
Re.不晚7 小时前
JAVA进阶之路——无奖问答挑战1
java·开发语言
你这个代码我看不懂7 小时前
@ConditionalOnProperty不直接使用松绑定规则
java·开发语言
pas1367 小时前
41-parse的实现原理&有限状态机
开发语言·前端·javascript
琹箐7 小时前
最大堆和最小堆 实现思路
java·开发语言·算法