Python JSON格式化案例如何美化JSON

wen python案例 26

本文目录导读:

Python JSON格式化案例如何美化JSON

  1. 方法1:使用json.dumps()indent参数(最常用)
  2. 方法2:控制排序和缩进细节
  3. 方法3:格式化已存在的JSON字符串
  4. 方法4:保存格式化JSON到文件
  5. 方法5:使用pprint模块(更友好的控制台输出)
  6. 常用参数对比表
  7. 高级技巧:处理特殊数据类型

方法1:使用json.dumps()indent参数(最常用)

import json
# 原始JSON字符串
data = {
    "name": "Alice",
    "age": 30,
    "hobbies": ["reading", "coding", "hiking"],
    "address": {
        "city": "Beijing",
        "district": "Haidian",
        "zip": "100089"
    }
}
# 将Python对象转换为格式化的JSON字符串
formatted_json = json.dumps(data, indent=4, ensure_ascii=False)
print(formatted_json)

输出效果:

{
    "name": "Alice",
    "age": 30,
    "hobbies": [
        "reading",
        "coding",
        "hiking"
    ],
    "address": {
        "city": "Beijing",
        "district": "Haidian",
        "zip": "100089"
    }
}

方法2:控制排序和缩进细节

import json
data = {"b": 2, "a": 1, "c": 3}
# 按键排序,自定义缩进和分隔符
formatted = json.dumps(
    data, 
    indent=2,           # 缩进2个空格
    sort_keys=True,     # 按键名排序
    separators=(',', ': '),  # 自定义分隔符
    ensure_ascii=False  # 支持中文
)
print(formatted)

输出:

{
  "a": 1,
  "b": 2,
  "c": 3
}

方法3:格式化已存在的JSON字符串

import json
# 假设你有一个未格式化的JSON字符串
ugly_json = '{"name":"Bob","score":95,"subjects":["Math","Physics"]}'
# 先解析为Python对象,再格式化输出
parsed = json.loads(ugly_json)
pretty = json.dumps(parsed, indent=4)
print(pretty)

输出:

{
    "name": "Bob",
    "score": 95,
    "subjects": [
        "Math",
        "Physics"
    ]
}

方法4:保存格式化JSON到文件

import json
data = {
    "database": "MySQL",
    "port": 3306,
    "tables": ["users", "orders"]
}
# 直接写入格式化的JSON文件
with open("config.json", "w", encoding="utf-8") as f:
    json.dump(data, f, indent=4, ensure_ascii=False)

生成的config.json内容:

{
    "database": "MySQL",
    "port": 3306,
    "tables": [
        "users",
        "orders"
    ]
}

方法5:使用pprint模块(更友好的控制台输出)

import json
from pprint import pprint
data = {
    "languages": ["Python", "Java", "C++"],
    "version": {
        "Python": 3.9,
        "Java": 17
    }
}
# 直接美化打印
pprint(data, indent=2, width=40)

输出:

{ 'languages': ['Python', 'Java', 'C++'],
  'version': { 'Java': 17, 'Python': 3.9}}

常用参数对比表

参数 作用 示例值
indent 缩进空格数 4
sort_keys 是否按键排序 True
ensure_ascii 是否转义非ASCII字符 False
separators 自定义分隔符
default 处理特殊类型 str

高级技巧:处理特殊数据类型

import json
from datetime import datetime
class CustomEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime):
            return obj.isoformat()
        return super().default(obj)
data = {
    "event": "meeting",
    "time": datetime.now(),
    "attendees": 5
}
print(json.dumps(data, cls=CustomEncoder, indent=2))

输出:

{
  "event": "meeting",
  "time": "2024-03-15T14:30:00",
  "attendees": 5
}

选择哪种方法取决于你的具体需求:

  • 可视化调试:推荐 indent=4 + ensure_ascii=False
  • 文件存储:使用 json.dump() 搭配相同参数
  • 处理复杂对象:需要自定义JSONEncoder

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