本文目录导读:

- 方法1:使用
json.dumps()的indent参数(最常用) - 方法2:控制排序和缩进细节
- 方法3:格式化已存在的JSON字符串
- 方法4:保存格式化JSON到文件
- 方法5:使用
pprint模块(更友好的控制台输出) - 常用参数对比表
- 高级技巧:处理特殊数据类型
方法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
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播