Python脚本如何生成JSON数据

wen 实用脚本 2

本文目录导读:

Python脚本如何生成JSON数据

  1. 使用 json 模块
  2. 使用 json 模块参数
  3. 从类对象生成JSON
  4. 使用 dataclasses 模块
  5. 使用第三方库 simplejson
  6. 生成复杂嵌套JSON
  7. 实用函数示例
  8. 注意事项

我来介绍几种在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)

注意事项

  1. 中文处理: 使用 ensure_ascii=False 保持中文字符
  2. 数据类型: JSON支持的数据类型有限(str, int, float, bool, list, dict, None)
  3. 特殊类型: datetime、set等需要自定义编码器
  4. 缩进: 使用 indent 参数使输出更可读

选择哪种方法取决于你的具体需求,最常用的是标准库 json 模块。

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