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

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

JSON 数据解析

一、JSON 数据解析

1.1 什么是 JSON?

JSON(JavaScript Object Notation) 是一种轻量级数据交换格式,常用于 Web 数据传输和配置文件。
它的结构与 Python 字典很相似。JSON 是一种用来表示和传输数据的文本格式。它以键-值对(key-value) 的方式来组织数据,非常类似于 Python 的字典(dict)或 JavaScript 的对象(object)

1.2 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 模块

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:基本读写与转换

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"])

输出

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)

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 响应(模拟接口返回)

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

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

转载请说明出处内容投诉
CSS教程网 » (20)100天python从入门到拿捏《JSON 数据解析》

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买