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

相关推荐
froginwe119 小时前
HTML5 测验
开发语言
初学小刘10 小时前
基于 U-Net 的医学图像分割
python·opencv·计算机视觉
B站计算机毕业设计之家11 小时前
Python招聘数据分析可视化系统 Boss直聘数据 selenium爬虫 Flask框架 数据清洗(附源码)✅
爬虫·python·selenium·机器学习·数据分析·flask
雪碧聊技术11 小时前
爬虫是什么?
大数据·爬虫·python·数据分析
FL162386312911 小时前
[yolov11改进系列]基于yolov11使用fasternet_t0替换backbone用于轻量化网络的python源码+训练源码
python·yolo·php
Freshman小白11 小时前
python算法打包为docker镜像(边缘端api服务)
python·算法·docker
岁岁岁平安11 小时前
python mysql-connector、PyMySQL基础
python·mysql·pymysql
野生技术架构师11 小时前
牛客网Java 高频面试题总结(2025最新版)
java·开发语言·面试
一只鹿鹿鹿11 小时前
系统安全设计方案书(Word)
开发语言·人工智能·web安全·需求分析·软件系统
铁锹少年11 小时前
当多进程遇上异步:一次 Celery 与 Async SQLAlchemy 的边界冲突
分布式·后端·python·架构·fastapi