本文目录导读:

- 从Python字典生成JSON
- 从列表生成JSON
- 从类对象生成JSON(使用类的dict)
- 自定义JSON序列化(复杂对象)
- 将JSON写入文件
- 生成嵌套JSON数据
- 使用json.dumps()的常用参数
- 生成JSON时的错误处理
- 常用技巧
在Python中生成JSON数据非常简单,主要使用内置的json模块,以下是常用的几种方法:
从Python字典生成JSON
import json
# 创建一个Python字典
data = {
"name": "张三",
"age": 28,
"city": "北京",
"skills": ["Python", "Java", "SQL"],
"is_student": False,
"scores": {
"math": 95,
"english": 88
}
}
# 将字典转换为JSON字符串
json_str = json.dumps(data, ensure_ascii=False, indent=2)
print(json_str)
从列表生成JSON
import json
# 创建包含多个对象的列表
users = [
{"id": 1, "name": "张三", "age": 28},
{"id": 2, "name": "李四", "age": 32},
{"id": 3, "name": "王五", "age": 25}
]
# 生成JSON字符串
json_str = json.dumps(users, ensure_ascii=False, indent=2)
print(json_str)
从类对象生成JSON(使用类的dict)
import json
class User:
def __init__(self, name, age, email):
self.name = name
self.age = age
self.email = email
# 创建用户实例
user = User("张三", 28, "zhangsan@example.com")
# 使用__dict__转换为字典再生成JSON
json_str = json.dumps(user.__dict__, ensure_ascii=False, indent=2)
print(json_str)
自定义JSON序列化(复杂对象)
import json
from datetime import datetime
class Product:
def __init__(self, name, price, created_at):
self.name = name
self.price = price
self.created_at = created_at
# 自定义JSON编码器
class ProductEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, Product):
return {
"name": obj.name,
"price": obj.price,
"created_at": obj.created_at.strftime("%Y-%m-%d %H:%M:%S")
}
if isinstance(obj, datetime):
return obj.strftime("%Y-%m-%d %H:%M:%S")
return super().default(obj)
# 创建产品对象
product = Product("笔记本电脑", 5999.00, datetime.now())
# 使用自定义编码器生成JSON
json_str = json.dumps(product, cls=ProductEncoder, ensure_ascii=False, indent=2)
print(json_str)
将JSON写入文件
import json
data = {
"company": "技术公司",
"employees": [
{"name": "张三", "position": "工程师"},
{"name": "李四", "position": "设计师"}
]
}
# 写入JSON文件
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
print("JSON文件已保存")
生成嵌套JSON数据
import json
# 构建复杂的嵌套JSON
order_data = {
"order_id": "ORD-2023-001",
"customer": {
"name": "张三",
"contact": {
"phone": "13800138000",
"email": "zhangsan@email.com"
}
},
"items": [
{
"product_id": "P001",
"name": "商品A",
"quantity": 2,
"price": 99.9
},
{
"product_id": "P002",
"name": "商品B",
"quantity": 1,
"price": 199.9
}
],
"total_amount": 399.7,
"order_date": "2023-12-01",
"status": "pending"
}
# 生成格式化的JSON
json_str = json.dumps(order_data, ensure_ascii=False, indent=2)
print(json_str)
使用json.dumps()的常用参数
import json
data = {"name": "测试", "value": None, "count": 42}
# 不同参数的效果
print("1. 紧凑格式:")
print(json.dumps(data))
print("\n2. 美化格式 (indent=2):")
print(json.dumps(data, indent=2))
print("\n3. 排序键 (sort_keys=True):")
print(json.dumps(data, indent=2, sort_keys=True))
print("\n4. 跳过None值 (skipkeys=True):")
print(json.dumps(data, skipkeys=True, indent=2))
print("\n5. 分离符特殊设置:")
print(json.dumps(data, indent=2, separators=(',', ': ')))
生成JSON时的错误处理
import json
def safe_json_generate(data, **kwargs):
"""安全生成JSON数据"""
try:
json_str = json.dumps(data, ensure_ascii=False, indent=2, **kwargs)
# 验证JSON是否有效
json.loads(json_str)
return json_str
except (TypeError, ValueError) as e:
print(f"JSON生成错误: {e}")
return None
# 测试
valid_data = {"name": "测试", "value": 123}
invalid_data = {1: "test"} # 键不是字符串
print(safe_json_generate(valid_data))
print(safe_json_generate(invalid_data)) # 会报错
常用技巧
import json
# 1. 动态生成JSON
def create_json_from_template(**kwargs):
template = {
"metadata": {
"version": "1.0",
"timestamp": None
},
**kwargs
}
return json.dumps(template, ensure_ascii=False, indent=2)
# 2. 批量生成JSON数据
def batch_create_users(num_users):
users = []
for i in range(num_users):
users.append({
"id": i + 1,
"name": f"用户{i+1}",
"email": f"user{i+1}@example.com"
})
return json.dumps(users, ensure_ascii=False, indent=2)
# 使用示例
print(create_json_from_template(name="测试", value=123))
print(batch_create_users(3))
这些方法覆盖了Python中生成JSON数据的常见场景,你可以根据实际需求选择合适的方法。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播