Python中JSON库的安装与使用指南
在Python开发中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,被广泛应用于数据存储、API接口、配置文件等场景,Python内置了强大的json库,用于处理JSON数据的编码(序列化)和解码(反序列化),无需额外安装即可直接使用,本文将详细介绍Python中json库的使用方法、常见操作及注意事项,帮助开发者高效处理JSON数据。
Python内置json库简介
Python标准库自带的json模块实现了JSON数据的解析和生成功能,支持以下核心操作:
- 序列化(Serialization):将Python对象(如字典、列表)转换为JSON格式字符串,使用
json.dumps()方法。 - 反序列化(Deserialization):将JSON格式字符串解析为Python对象,使用
json.loads()方法。
由于json库是Python的标准库,无需安装,只需在代码中通过import json导入即可使用。
json库的核心方法及使用示例
序列化:json.dumps()——将Python对象转为JSON字符串
dumps()方法(dump string)用于将Python对象编码为JSON格式字符串,常用参数如下:
indent:指定缩进空格数,使JSON字符串格式化(便于阅读),默认为None(不缩进)。ensure_ascii:是否将非ASCII字符转为ASCII编码,默认为True;若需保留原字符(如中文),可设为False。sort_keys:是否对字典的键进行排序,默认为False。
示例:
import json
# Python字典
data = {
"name": "张三",
"age": 25,
"hobbies": ["阅读", "编程"],
"is_student": True
}
# 序列化为JSON字符串(不缩进)
json_str = json.dumps(data)
print("不缩进的JSON字符串:", json_str)
# 输出: {"name": "\u5f20\u4e09", "age": 25, "hobbies": ["\u9605\u8bfb", "\u7f16\u7a0b"], "is_student": true}
# 序列化为格式化的JSON字符串(缩进4空格,保留中文)
json_str_formatted = json.dumps(data, indent=4, ensure_ascii=False)
print("\n格式化的JSON字符串:")
print(json_str_formatted)
"""
输出:
{
"name": "张三",
"age": 25,
"hobbies": [
"阅读",
"编程"
],
"is_student": true
}
"""
反序列化:json.loads()——将JSON字符串转为Python对象
loads()方法(load string)用于将JSON格式字符串解析为Python对象,Python与JSON的对应关系如下:
| JSON类型 | Python类型 |
|---|---|
| object(对象) | dict(字典) |
| array(数组) | list(列表) |
| string(字符串) | str(字符串) |
| number(数字) | int/float(整数/浮点数) |
| true/false | True/False |
| null | None |
示例:
import json
# JSON字符串
json_str = '{"name": "李四", "age": 30, "city": "北京"}'
# 反序列化为Python字典
python_dict = json.loads(json_str)
print("反序列化后的Python对象:", python_dict)
print("姓名:", python_dict["name"]) # 输出: 姓名: 李四
print("年龄:", python_dict["age"]) # 输出: 年龄: 30
文件操作:json.dump()与json.load()
除了处理字符串,json库还支持直接读写JSON文件:
json.dump():将Python对象写入文件(序列化到文件)。json.load():从文件中读取JSON数据并反序列化为Python对象。
示例1:将Python对象写入JSON文件
import json
data = {
"product": "笔记本电脑",
"price": 5999,
"specs": {"CPU": "i5", "memory": "16GB"}
}
# 写入JSON文件(ensure_ascii=False保留中文,indent=4格式化)
with open("product.json", "w", encoding="utf-8") as f:
json.dump(data, f, indent=4, ensure_ascii=False)
print("数据已写入product.json文件")
执行后,product.json如下:
{
"product": "笔记本电脑",
"price": 5999,
"specs": {
"CPU": "i5",
"memory": "16GB"
}
}
示例2:从JSON文件读取数据
import json
# 从文件读取JSON数据
with open("product.json", "r", encoding="utf-8") as f:
loaded_data = json.load(f)
print("从文件读取的数据:", loaded_data)
print("产品名称:", loaded_data["product"]) # 输出: 产品名称: 笔记本电脑
常见问题及注意事项
处理复杂对象(如自定义类)
json库默认只能处理Python基本类型(dict、list、str、int、float、True、False、None),若需序列化自定义类的对象,需通过default参数指定转换函数,或继承json.JSONEncoder类重写default()方法。
示例:序列化自定义类对象
import json
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
# 自定义转换函数
def person_to_dict(obj):
if isinstance(obj, Person):
return {"name": obj.name, "age": obj.age}
raise TypeError(f"Object of type {type(obj)} is not JSON serializable")
p = Person("王五", 28)
# 使用default参数转换
json_str = json.dumps(p, default=person_to_dict)
print("自定义类序列化结果:", json_str) # 输出: {"name": "王五", "age": 28}
处理JSON文件中的中文乱码
若写入JSON文件时出现中文乱码,通常是因为文件编码问题,确保:
- 打开文件时指定
encoding="utf-8"(如open("file.json", "w", encoding="utf-8"))。 - 使用
ensure_ascii=False参数(避免非ASCII字符被转义)。
处理JSON数据中的特殊格式
JSON数据中的日期时间、Decimal等类型无法直接序列化,需先转为字符串:
from datetime import datetime
import json
data = {
"time": datetime.now(),
"value": 12.34
}
# 将datetime转为字符串
json_str = json.dumps(data, default=str)
print("处理特殊格式后的JSON:", json_str)
# 输出: {"time": "2023-10-01 12:00:00.000000", "value": 12.34}
Python内置的json库是处理JSON数据的利器,无需安装即可直接使用,支持序列化、反序列化及文件读写操作,开发者只需dumps()、loads()、dump()、load()四个核心方法,并注意处理中文、复杂对象等特殊情况,即可高效应对JSON数据处理需求,无论是API交互、配置管理还是数据存储,json库都能提供稳定、便捷的支持。



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