Python3内置模块json详解:JSON编码与解码方法教程 | Python数据处理
- Python
- 2025-08-17
- 245
Python3 JSON模块详解
全面解析json模块的编码与解码方法,掌握Python数据序列化核心技能
JSON与Python数据结构
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。Python的json模块提供了在Python对象和JSON格式之间转换的功能。
- Python字典(dict) ↔ JSON对象({ })
- Python列表(list) ↔ JSON数组([ ])
- Python字符串(str) ↔ JSON字符串(" ")
- Python整数(int)、浮点数(float) ↔ JSON数字
- Python True/False ↔ JSON true/false
- Python None ↔ JSON null
JSON编码方法
JSON编码是将Python对象转换为JSON格式字符串的过程,主要使用json.dumps()
和json.dump()
两个方法。
json.dumps()方法
json.dumps()
方法将Python对象转换为JSON格式的字符串。
import json
# Python字典
data = {
"name": "张三",
"age": 30,
"is_student": False,
"courses": ["Python", "JavaScript", "数据库"],
"address": None
}
# 将Python对象转换为JSON字符串
json_string = json.dumps(data, ensure_ascii=False, indent=4)
print("JSON字符串:")
print(json_string)
json.dump()方法
json.dump()
方法将Python对象转换为JSON格式并写入文件。
import json
data = {
"company": "TechCorp",
"employees": [
{"name": "Alice", "position": "Developer"},
{"name": "Bob", "position": "Designer"}
],
"founded": 2010
}
# 将Python对象写入JSON文件
with open("company_data.json", "w", encoding="utf-8") as f:
json.dump(data, f, indent=4, ensure_ascii=False)
print("数据已成功写入company_data.json文件")
dumps/dump常用参数
参数 | 说明 | 默认值 |
---|---|---|
ensure_ascii | 是否确保ASCII字符,设为False可输出中文 | True |
indent | 缩进空格数,使JSON格式化输出 | None |
separators | 指定分隔符,如(item_separator, key_separator) | (', ', ': ') |
sort_keys | 是否按键排序 | False |
JSON解码方法
JSON解码是将JSON格式字符串或文件转换为Python对象的过程,主要使用json.loads()
和json.load()
两个方法。
json.loads()方法
json.loads()
方法将JSON格式的字符串转换为Python对象。
import json
# JSON格式字符串
json_str = '''
{
"book": {
"title": "Python编程:从入门到实践",
"author": "Eric Matthes",
"year": 2016,
"tags": ["编程", "Python", "入门"]
}
}
'''
# 将JSON字符串转换为Python对象
data = json.loads(json_str)
# 访问数据
print("书名:", data["book"]["title"])
print("作者:", data["book"]["author"])
print("标签:", ", ".join(data["book"]["tags"]))
json.load()方法
json.load()
方法从JSON文件中读取数据并转换为Python对象。
import json
# 从JSON文件读取数据
with open("config.json", "r", encoding="utf-8") as f:
config = json.load(f)
# 使用配置数据
print("应用名称:", config["app_name"])
print("版本:", config["version"])
print("设置项:", config["settings"])
高级应用技巧
自定义对象序列化
通过继承JSONEncoder处理自定义对象的序列化:
class User:
def __init__(self, name, age):
self.name = name
self.age = age
class CustomEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, User):
return {"name": obj.name, "age": obj.age}
return super().default(obj)
user = User("李四", 28)
json_str = json.dumps(user, cls=CustomEncoder)
print(json_str) # 输出: {"name": "李四", "age": 28}
处理日期时间
序列化datetime对象为ISO格式字符串:
from datetime import datetime
def datetime_handler(obj):
if isinstance(obj, datetime):
return obj.isoformat()
raise TypeError("类型不支持")
data = {
"event": "会议",
"time": datetime.now()
}
json_str = json.dumps(data, default=datetime_handler)
print(json_str) # 输出: {"event": "会议", "time": "2023-08-17T14:30:00.123456"}
JSON处理最佳实践
- 始终指定编码(如UTF-8)以避免字符问题
- 处理文件时使用
with
语句确保正确关闭 - 对用户输入进行验证,防止JSON注入攻击
- 处理大文件时考虑流式处理
- 使用
json.tool
模块验证和格式化JSON
总结
Python的json模块提供了强大而灵活的JSON处理能力,是数据交换和存储的重要工具。通过掌握json.dumps、json.loads、json.dump和json.load这四个核心方法,你可以轻松实现Python对象与JSON格式之间的转换。
在实际应用中,根据需求选择合适的参数配置,如ensure_ascii、indent等,可以优化输出结果。对于复杂对象的序列化,可通过自定义编码器或default参数处理。
JSON作为现代Web开发和数据交换的标准格式,熟练掌握Python中的JSON处理技巧,将大大提高你的开发效率和数据处理能力。
函数 | 功能 | 使用场景 |
---|---|---|
json.dumps() | Python对象 → JSON字符串 | 需要JSON字符串的场景(API响应、数据传输) |
json.dump() | Python对象 → JSON文件 | 数据持久化存储到文件 |
json.loads() | JSON字符串 → Python对象 | 解析来自API、客户端的JSON数据 |
json.load() | JSON文件 → Python对象 | 读取存储在文件中的JSON数据 |
本文由YangLuoFan于2025-08-17发表在吾爱品聚,如有疑问,请联系我们。
本文链接:https://521pj.cn/20258365.html
发表评论