本文目录导读:

我来介绍几种在Python中生成JSON数据的方法:
使用 json 模块
从Python字典生成JSON
import json
# 创建Python字典
data = {
"name": "张三",
"age": 25,
"city": "北京",
"hobbies": ["读书", "跑步", "编程"],
"is_student": False,
"scores": {
"数学": 95,
"英语": 88,
"语文": 92
}
}
# 转换为JSON字符串
json_string = json.dumps(data, ensure_ascii=False, indent=2)
print(json_string)
# 保存到文件
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
从列表生成JSON
import json
users = [
{"name": "张三", "age": 25},
{"name": "李四", "age": 30},
{"name": "王五", "age": 35}
]
json_string = json.dumps(users, ensure_ascii=False, indent=2)
print(json_string)
使用 json 模块参数
import json
data = {"name": "张三", "age": 25}
# 常用参数
json_string = json.dumps(
data,
indent=4, # 缩进空格数
sort_keys=True, # 按键排序
ensure_ascii=False, # 支持中文
separators=(',', ':') # 分隔符设置
)
print(json_string)
从类对象生成JSON
import json
class User:
def __init__(self, name, age, email):
self.name = name
self.age = age
self.email = email
def to_dict(self):
return {
"name": self.name,
"age": self.age,
"email": self.email
}
# 创建对象
user = User("张三", 25, "zhangsan@example.com")
# 转换为JSON
json_string = json.dumps(user.to_dict(), ensure_ascii=False, indent=2)
print(json_string)
使用 dataclasses 模块
from dataclasses import dataclass, asdict
import json
@dataclass
class Person:
name: str
age: int
city: str
# 创建对象
person = Person("张三", 25, "北京")
# 转换为JSON
json_string = json.dumps(asdict(person), ensure_ascii=False, indent=2)
print(json_string)
使用第三方库 simplejson
import simplejson as json
data = {
"name": "张三",
"age": 25,
"scores": [95, 88, 92]
}
# 更强大的转换功能
json_string = json.dumps(data, ensure_ascii=False, indent=2)
print(json_string)
生成复杂嵌套JSON
import json
from datetime import datetime
# 自定义JSON编码器
class CustomEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime):
return obj.isoformat()
if isinstance(obj, set):
return list(obj)
return super().default(obj)
# 复杂数据
complex_data = {
"timestamp": datetime.now(),
"tags": {"python", "json", "data"},
"metadata": {
"version": "1.0",
"created_by": "自动化脚本"
},
"items": [
{"id": 1, "value": "A"},
{"id": 2, "value": "B"}
]
}
# 使用自定义编码器
json_string = json.dumps(complex_data, cls=CustomEncoder,
ensure_ascii=False, indent=2)
print(json_string)
实用函数示例
import json
def generate_json_file(filename, data, pretty=True):
"""生成JSON文件"""
try:
with open(filename, 'w', encoding='utf-8') as f:
if pretty:
json.dump(data, f, ensure_ascii=False, indent=2)
else:
json.dump(data, f, ensure_ascii=False)
print(f"JSON文件已生成: {filename}")
return True
except Exception as e:
print(f"生成失败: {e}")
return False
def json_to_pretty_string(data):
"""美化JSON字符串"""
return json.dumps(data, ensure_ascii=False, indent=2,
sort_keys=True)
# 使用示例
sample_data = {
"name": "张三",
"age": 25,
"active": True
}
# 生成文件和字符串
generate_json_file("output.json", sample_data)
pretty_json = json_to_pretty_string(sample_data)
print(pretty_json)
注意事项
- 中文处理: 使用
ensure_ascii=False保持中文字符 - 数据类型: JSON支持的数据类型有限(str, int, float, bool, list, dict, None)
- 特殊类型: datetime、set等需要自定义编码器
- 缩进: 使用
indent参数使输出更可读
选择哪种方法取决于你的具体需求,最常用的是标准库 json 模块。