python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python对JSON格式化

Python对JSON格式化的多种方法

作者:detayun

JSON作为Web开发中最常用的数据交换格式,其可读性和格式规范性对开发调试至关重要,本文将详细介绍Python中格式化JSON的多种方法,帮助开发者高效处理JSON数据,需要的朋友可以参考下

引言

JSON作为Web开发中最常用的数据交换格式,其可读性和格式规范性对开发调试至关重要。本文将详细介绍Python中格式化JSON的多种方法,帮助开发者高效处理JSON数据。

一、基础格式化方法

1. 使用标准库json模块

import json

data = {"name": "张三", "age": 25, "skills": ["Python", "Java"]}

# 基本格式化
formatted_json = json.dumps(data, indent=4, ensure_ascii=False)
print(formatted_json)

# 输出结果:
"""
{
    "name": "张三",
    "age": 25,
    "skills": [
        "Python",
        "Java"
    ]
}
"""

关键参数说明:

2. 紧凑格式化

compact_json = json.dumps(data, separators=(',', ':'))
# 输出:{"name":"张三","age":25,"skills":["Python","Java"]}

二、高级格式化技巧

1. 自定义格式处理器

def pretty_json(obj):
    return json.dumps(obj, 
                    indent=2,
                    sort_keys=True,
                    ensure_ascii=False,
                    separators=(',', ': '))

print(pretty_json(data))

2. 处理复杂数据结构

from datetime import datetime

complex_data = {
    "timestamp": datetime.now(),
    "nested": {"a": 1, "b": [1, 2, 3]}
}

# 自定义序列化
def default_serializer(obj):
    if isinstance(obj, datetime):
        return obj.isoformat()
    raise TypeError("Type not serializable")

print(json.dumps(complex_data, default=default_serializer, indent=2))

三、文件操作

1. 写入格式化JSON文件

with open('data.json', 'w', encoding='utf-8') as f:
    json.dump(data, f, indent=4, ensure_ascii=False)

2. 读取并格式化

with open('data.json', 'r', encoding='utf-8') as f:
    loaded_data = json.load(f)
    print(json.dumps(loaded_data, indent=2))

四、命令行工具

Python自带JSON格式化工具:

# 格式化文件
python -m json.tool input.json output.json

# 管道操作
echo '{"name":"李四","age":30}' | python -m json.tool

五、第三方库推荐

  1. json5(支持注释等扩展语法)
import json5

data = json5.loads("""{
    // 注释
    name: "王五",
    age: 28
}""")
  1. demjson(容错性更强)
import demjson

# 自动修复格式错误
data = demjson.decode("{'key': 'value',}")

六、常见问题解决

  1. 中文乱码问题
# 错误写法
json.dumps(data)  # 中文会变成Unicode转义

# 正确写法
json.dumps(data, ensure_ascii=False)
  1. 日期格式处理
from datetime import datetime

def datetime_handler(x):
    if isinstance(x, datetime):
        return x.isoformat()
    raise TypeError("Unknown type")

json.dumps(data, default=datetime_handler)
  1. 大数据量格式化优化
# 使用ijson进行流式处理
import ijson

with open('large.json', 'rb') as f:
    for item in ijson.items(f, 'item'):
        print(json.dumps(item, indent=2))

七、格式化验证

def validate_json(json_str):
    try:
        json.loads(json_str)
        return True
    except json.JSONDecodeError as e:
        print(f"格式错误:{str(e)}")
        return False

总结

Python提供了多种JSON格式化方案:

  1. 基础需求使用标准库json模块
  2. 复杂场景选择json5demjson
  3. 大数据量使用流式处理库ijson
  4. 命令行操作使用python -m json.tool

根据具体需求选择合适的方法,合理设置indent、sort_keys等参数,可以显著提升JSON数据的可读性和可维护性。建议始终设置ensure_ascii=False以获得更好的中文显示效果。

以上就是Python对JSON格式化的多种方法的详细内容,更多关于Python对JSON格式化的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文