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

相关推荐
合作小小程序员小小店10 分钟前
桌面安全开发,桌面二进制%恶意行为拦截查杀%系统安全开发3.0,基于c/c++语言,mfc,win32,ring3,dll,hook,inject,无数据库
c语言·开发语言·c++·安全·系统安全
合作小小程序员小小店10 分钟前
桌面开发,超市管理系统开发,基于C#,winform,sql server数据库
开发语言·数据库·sql·microsoft·sqlserver·c#
Codeking__12 分钟前
C++ 11 atomic 原子性操作
开发语言·c++
懂得节能嘛.18 分钟前
【Java动态线程池】Redis监控+动态调参
java·开发语言·redis
ModestCoder_1 小时前
ROS Bag与导航数据集技术指南
开发语言·人工智能·自然语言处理·机器人·具身智能
卡提西亚1 小时前
C++笔记-34-map/multimap容器
开发语言·c++·笔记
2***B4491 小时前
C++在金融中的QuantLibXL
开发语言·c++·金融
A***07171 小时前
C++在游戏中的阴影渲染
开发语言·c++·游戏
2401_837088501 小时前
Redisson的multilock原理
java·开发语言