本文目录导读:

我来为你提供几个Python字典转JSON的案例和数据生成方法。
基础案例:字典转JSON
import json
# 简单的字典
data = {
"name": "张三",
"age": 25,
"city": "北京",
"hobbies": ["编程", "读书", "游泳"],
"is_student": False
}
# 转换为JSON字符串
json_str = json.dumps(data, ensure_ascii=False)
print(json_str)
# 输出: {"name": "张三", "age": 25, "city": "北京", "hobbies": ["编程", "读书", "游泳"], "is_student": false}
生成随机数据案例
import json
import random
import string
from datetime import datetime, timedelta
def generate_user_data(num_users=5):
"""生成用户数据"""
users = []
first_names = ["张三", "李四", "王五", "赵六", "刘七"]
last_names = ["伟", "芳", "娜", "敏", "强"]
cities = ["北京", "上海", "广州", "深圳", "杭州"]
for i in range(num_users):
user = {
"id": i + 1,
"name": random.choice(first_names) + random.choice(last_names),
"age": random.randint(18, 60),
"city": random.choice(cities),
"salary": round(random.uniform(5000, 30000), 2),
"is_active": random.choice([True, False]),
"hobbies": random.sample(["读书", "运动", "音乐", "旅游", "摄影"],
random.randint(1, 3))
}
users.append(user)
return users
# 生成数据并转换为JSON
users = generate_user_data(3)
json_str = json.dumps(users, ensure_ascii=False, indent=2)
print(json_str)
嵌套数据结构生成
import json
from datetime import datetime
def generate_order_data():
"""生成订单数据"""
products = [
{"id": "P001", "name": "笔记本电脑", "price": 5999},
{"id": "P002", "name": "手机", "price": 3999},
{"id": "P003", "name": "耳机", "price": 299},
]
orders = []
for i in range(3):
order = {
"order_id": f"ORD{datetime.now().strftime('%Y%m%d')}{i+1:03d}",
"customer": {
"name": f"客户{i+1}",
"email": f"customer{i+1}@example.com",
"address": {
"province": "广东省",
"city": "深圳市",
"detail": f"科技园区{i+1}号楼"
}
},
"items": [
{
"product": product,
"quantity": i + 1,
"subtotal": product["price"] * (i + 1)
}
for product in products
],
"total_amount": sum(p["price"] * (i + 1) for p in products),
"create_time": datetime.now().isoformat()
}
orders.append(order)
return orders
# 生成数据
orders = generate_order_data()
json_str = json.dumps(orders, ensure_ascii=False, indent=2)
print(json_str[:500] + "...") # 只打印前500个字符
批量数据生成(用于测试)
import json
import random
def generate_large_dataset(size=100):
"""生成大型数据集用于测试"""
data = []
for i in range(size):
record = {
"id": i,
"value": random.randint(1, 1000),
"category": random.choice(["A", "B", "C", "D"]),
"timestamp": f"2024-01-{random.randint(1, 31):02d}T{random.randint(0, 23):02d}:{random.randint(0, 59):02d}:00",
"metrics": {
"temperature": round(random.uniform(20, 40), 1),
"humidity": round(random.uniform(30, 80), 1),
"pressure": round(random.uniform(900, 1100), 1)
},
"tags": random.sample(["sensor1", "sensor2", "sensor3", "sensor4"],
random.randint(1, 3))
}
data.append(record)
return data
# 生成100条测试数据
test_data = generate_large_dataset(100)
json_str = json.dumps(test_data, indent=2)
# 保存到文件
with open('test_data.json', 'w', encoding='utf-8') as f:
f.write(json_str)
print(f"生成了 {len(test_data)} 条数据,已保存到 test_data.json")
从CSV/Excel生成JSON数据
import json
import csv
import io
def csv_to_json(csv_string):
"""从CSV字符串生成JSON"""
# 模拟CSV数据
csv_data = """name,age,city,score
张三,25,北京,95.5
李四,30,上海,88.0
王五,28,广州,92.3"""
reader = csv.DictReader(io.StringIO(csv_data))
data = []
for row in reader:
# 转换数据类型
row["age"] = int(row["age"])
row["score"] = float(row["score"])
data.append(row)
return json.dumps(data, ensure_ascii=False, indent=2)
# 使用示例
json_result = csv_to_json(None)
print(json_result)
实用工具函数
import json
from typing import Any, List, Dict
class DataGenerator:
"""数据生成器类"""
@staticmethod
def to_json(data: Any, pretty: bool = True) -> str:
"""转换数据为JSON字符串"""
return json.dumps(
data,
ensure_ascii=False,
indent=2 if pretty else None,
default=str # 处理不可序列化的对象
)
@staticmethod
def save_to_file(data: Any, filename: str):
"""保存数据到JSON文件"""
with open(filename, 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
print(f"数据已保存到 {filename}")
@staticmethod
def load_from_file(filename: str) -> Dict:
"""从JSON文件加载数据"""
with open(filename, 'r', encoding='utf-8') as f:
return json.load(f)
# 使用示例
generator = DataGenerator()
# 生成数据
data = [
{"id": 1, "name": "产品A", "price": 99.9},
{"id": 2, "name": "产品B", "price": 199.9}
]
# 转换为JSON
print(generator.to_json(data))
# 保存到文件
generator.save_to_file(data, "products.json")
# 从文件读取
loaded_data = generator.load_from_file("products.json")
print(loaded_data)
使用建议
- 设置
ensure_ascii=False:确保中文正常显示 - 使用
indent参数:格式化输出使JSON可读 - 处理特殊类型:使用
default=str处理datetime等不可序列化对象 - 数据验证:生成数据后验证JSON格式是否正确
这些案例覆盖了从简单到复杂的JSON数据生成场景,你可以根据实际需求选择合适的方案。