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

相关推荐
源码哥_博纳软云3 小时前
JAVA同城预约服务家政服务美容美发洗车保洁搬家维修家装系统源码小程序+公众号+h5
java·开发语言·微信小程序·小程序
snow@li3 小时前
d3.js:学习积累
开发语言·前端·javascript
jie*3 小时前
小杰深度学习(fourteen)——视觉-经典神经网络——ResNet
人工智能·python·深度学习·神经网络·机器学习·tensorflow·lstm
编程岁月3 小时前
java面试-0203-java集合并发修改异常、快速/安全失败原理、解决方法?
java·开发语言·面试
jie*4 小时前
小杰深度学习(sixteen)——视觉-经典神经网络——MobileNetV2
人工智能·python·深度学习·神经网络·tensorflow·numpy·matplotlib
CoderCodingNo4 小时前
【GESP】C++五级考试大纲知识点梳理, (3-4) 链表-双向循环链表
开发语言·c++·链表
llz_1124 小时前
第五周作业(JavaScript)
开发语言·前端·javascript
曾经的三心草4 小时前
OpenCV4-直方图与傅里叶变换-项目实战-信用卡数字识别
python·opencv·计算机视觉
W.Y.B.G4 小时前
JavaScript 计算闰年方法
开发语言·前端·javascript