Python中的JSON:数据交换的“通用语言”
在Python编程的世界里,我们经常会遇到一个词:JSON,如果你是新手,可能会对这个缩写感到困惑,它到底是什么?为什么在Python中如此重要?本文将用通俗易懂的方式,为你揭开Python中JSON的神秘面纱。
什么是JSON?—— 超市里的“通用标签”
想象一下,你在一个巨大的国际超市里,来自世界各地的商品琳琅满目,为了让大家都能看懂,每个商品上都贴了一张“通用标签”,这张标签用一种标准化的格式(比如商品名、产地、价格、保质期)清晰地展示了商品信息,无论是中文、英文还是其他语言的顾客,都能轻松理解。
JSON(JavaScript Object Notation)就是这样一种“通用标签”,它是一种轻量级的数据交换格式,就像超市里的标签一样,设计用来在不同的程序、不同的系统之间传递和存储数据。
它的核心特点是:
- 易读易写:格式清晰,非常接近人类语言,无论是人还是机器都很容易阅读和解析。
- 轻量级:相比于XML等其他格式,JSON的文本更小,传输速度更快。
- 结构化:JSON数据有固定的结构,通常以键值对的形式组织,就像一个字典或者一个列表。
一个典型的JSON数据长这样:
{
"name": "张三",
"age": 30,
"isStudent": false,
"courses": [
{"subject": "数学", "score": 95},
{"subject": "英语", "score": 88}
]
}
你看,它是不是很像Python里的字典和列表的组合?这正是Python与JSON天生亲近的原因。
Python为什么要用JSON?—— 程序间的“握手协议”
程序之间不能直接“对话”,就像两个说不同语言的人一样,它们需要一个共同的“握手协议”来交换信息,JSON就是这个完美的“协议”。
Python程序在内存中使用的是自己的数据结构,比如字典(dict)和列表(list),这些数据结构非常强大,但它们是Python独有的,其他语言(如JavaScript、Java)无法直接理解。
当你的Python程序需要:
- 将数据保存到文件:你想把一个用户信息列表保存下来,下次程序启动时还能读取。
- 通过API从网络服务器获取数据:比如调用天气API,服务器返回的数据就是JSON格式的。
- 与其他编程语言的应用程序通信:比如你的Python后端需要给一个用JavaScript编写的前端网页发送数据。
在这些场景下,就需要一个“翻译官”在Python的数据结构和外部世界之间进行转换,这个“翻译官”就是Python内置的 json 模块。
json.dumps():把Python的字典/列表,“翻译”成JSON格式的字符串,这个过程叫 序列化。json.loads():把JSON格式的字符串,“翻译”回Python的字典/列表,这个过程叫 反序列化。
Python中json模块的核心用法
Python内置了 json 模块,你不需要安装任何东西,直接 import json 就能使用,它主要有四个核心函数,它们就了Python操作JSON的精髓。
序列化:将Python对象转为JSON字符串 (dumps)
dumps 是 "dump string" 的缩写,当你想把Python数据变成一个字符串,以便存储到文本文件或通过网络发送时,就用它。
import json
# Python字典
python_data = {
"name": "李四",
"age": 25,
"hobbies": ["编程", "阅读"]
}
# 使用 dumps() 将字典转为JSON字符串
json_string = json.dumps(python_data)
print(f"Python对象: {python_data}")
print(f"JSON字符串: {json_string}")
print(f"JSON字符串的类型: {type(json_string)}")
输出:
Python对象: {'name': '李四', 'age': 25, 'hobbies': ['编程', '阅读']}
JSON字符串: {"name": "李四", "age": 25, "hobbies": ["编程", "阅读"]}
JSON字符串的类型: <class 'str'>
你会发现,中文被自动转义成了Unicode字符(\u674e\u56db),为了保持可读性,我们可以增加 ensure_ascii=False 参数:
json_string_readable = json.dumps(python_data, ensure_ascii=False, indent=4) print(json_string_readable)
输出(格式化后):
{
"name": "李四",
"age": 25,
"hobbies": [
"编程",
"阅读"
]
}
反序列化:将JSON字符串转为Python对象 (loads)
loads 是 "load string" 的缩写,当你从文件或网络接收到一个JSON字符串,需要把它变回Python可以操作的数据时,就用它。
import json
# 假设这是从网络接收到的JSON字符串
json_data_from_web = '{"city": "北京", "population": 21540000}'
# 使用 loads() 将JSON字符串转为Python字典
python_dict = json.loads(json_data_from_web)
print(f"JSON字符串: {json_data_from_web}")
print(f"转换后的Python字典: {python_dict}")
print(f"Python字典的类型: {type(python_dict)}")
# 现在就可以像操作普通字典一样操作它
print(f"城市名称: {python_dict['city']}")
输出:
JSON字符串: {"city": "北京", "population": 21540000}
转换后的Python字典: {'city': '北京', 'population': 21540000}
Python字典的类型: <class 'dict'>
城市名称: 北京
写入文件:将Python对象转为JSON并保存 (dump)
dump 和 dumps 功能一样,但它不是生成字符串,而是直接将数据以JSON格式写入一个文件对象中,非常方便。
import json
data_to_save = {
"user_id": 1001,
"username": "python_dev",
"status": "active"
}
# 使用 with 语句打开文件,确保文件会被正确关闭
with open('user_data.json', 'w', encoding='utf-8') as f:
# dump() 会直接将数据写入文件 f
json.dump(data_to_save, f, ensure_ascii=False, indent=4)
print("数据已成功保存到 user_data.json 文件")
执行后,会生成一个 user_data.json 文件,内容如下:
{
"user_id": 1001,
"username": "python_dev",
"status": "active"
}
读取文件:从文件中读取JSON数据并转为Python对象 (load)
load 和 loads 功能一样,但它不是从字符串读取,而是从一个文件对象中读取JSON数据并解析。
import json
# 假设我们已经有了 user_data.json 文件
with open('user_data.json', 'r', encoding='utf-8') as f:
# load() 会直接从文件 f 中读取并解析JSON数据
loaded_data = json.load(f)
print(f"从文件读取到的数据: {loaded_data}")
print(f"数据类型: {type(loaded_data)}")
输出:
从文件读取到的数据: {'user_id': 1001, 'username': 'python_dev', 'status': 'active'}
数据类型: <class 'dict'>
JSON在Python中扮演着数据交换的“通用语言”和“翻译官”的角色。
- 它是什么? 一种轻量、易读的数据格式。
- 为什么用? 为了让Python程序能与其他系统、文件和网络进行数据交互。
- 怎么用? 通过Python内置的
json模块:json.dumps()/json.dump():将Python数据编码成JSON。json.loads()/json.load():将JSON数据解码成Python数据。
了JSON,你就了一项连接Python与外部世界的关键技能,无论是做数据分析、Web开发还是自动化脚本,你都将更加得心应手。



还没有评论,来说两句吧...