Python案例怎么生成JSON数据?

wen python案例 11

本文目录导读:

Python案例怎么生成JSON数据?

  1. 从Python字典生成JSON
  2. 从列表生成JSON
  3. 从类对象生成JSON(使用类的dict
  4. 自定义JSON序列化(复杂对象)
  5. 将JSON写入文件
  6. 生成嵌套JSON数据
  7. 使用json.dumps()的常用参数
  8. 生成JSON时的错误处理
  9. 常用技巧

在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数据的常见场景,你可以根据实际需求选择合适的方法。

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