Python字典转JSON案例如何生成数据

wen python案例 28

本文目录导读:

Python字典转JSON案例如何生成数据

  1. 基础案例:字典转JSON
  2. 生成随机数据案例
  3. 嵌套数据结构生成
  4. 批量数据生成(用于测试)
  5. 从CSV/Excel生成JSON数据
  6. 实用工具函数
  7. 使用建议

我来为你提供几个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)

使用建议

  1. 设置ensure_ascii=False:确保中文正常显示
  2. 使用indent参数:格式化输出使JSON可读
  3. 处理特殊类型:使用default=str处理datetime等不可序列化对象
  4. 数据验证:生成数据后验证JSON格式是否正确

这些案例覆盖了从简单到复杂的JSON数据生成场景,你可以根据实际需求选择合适的方案。

抱歉,评论功能暂时关闭!