Python对JSON格式化的多种方法

 更新时间:2025年09月03日 09:04:36   作者: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"
    ]
}
"""

关键参数说明:

  • indent:缩进空格数(推荐2或4)
  • ensure_ascii:设为False可显示中文
  • sort_keys:设为True可按键名排序

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格式化的资料请关注脚本之家其它相关文章!

相关文章

  • Python 内置函数complex详解

    Python 内置函数complex详解

    这篇文章主要介绍了Python 内置函数complex详解的相关资料,需要的朋友可以参考下
    2016-10-10
  • pytorch的Backward过程用时太长问题及解决

    pytorch的Backward过程用时太长问题及解决

    这篇文章主要介绍了pytorch的Backward过程用时太长问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • 利用Python实现网络运维自动化的实战案例

    利用Python实现网络运维自动化的实战案例

    Python作为一种简洁而强大的编程语言,已经成为网络运维自动化的热门选择,本文将介绍如何利用Python实现网络设备配置管理、监控和故障排除等自动化任务,并提供代码示例,需要的朋友可以参考下
    2024-03-03
  • Python利用openpyxl类实现在Excel中绘制乐高图案

    Python利用openpyxl类实现在Excel中绘制乐高图案

    在商场看到一个超级玛丽的乐高图,感觉使用excel的颜色填充也能画出来。所以本文将借助openpyxl类实现在Excel中绘制乐高图案,需要的可以参考一下
    2022-12-12
  • Python驱动ansys执行apdl文件的代码示例

    Python驱动ansys执行apdl文件的代码示例

    在Python中驱动ANSYS执行APDL(ANSYS Parametric Design Language)文件,可以通过使用subprocess模块来调用ANSYS的可执行文件,并传递APDL文件作为参数,本文给大家介绍了一个详细的代码示例,需要的朋友可以参考下
    2024-11-11
  • Python高级应用探索之元编程和并发编程详解

    Python高级应用探索之元编程和并发编程详解

    Python作为一种简单易用且功能强大的编程语言,广泛应用于各个领域,本文主要来和大家一起探索一下Python中的优化技巧、元编程和并发编程,希望对大家有所帮助
    2023-11-11
  • Python爬虫程序架构和运行流程原理解析

    Python爬虫程序架构和运行流程原理解析

    这篇文章主要介绍了Python爬虫程序架构和运行流程原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Python中requests库的基本概念与具体使用方法

    Python中requests库的基本概念与具体使用方法

    requests库是用python编写的基于urllib,requests唯一的一个非转基因的Python HTTP库,下面这篇文章主要给大家介绍了关于Python中requests库的基本概念与具体使用方法,需要的朋友可以参考下
    2022-08-08
  • 详解如何在Pandas中删除常量列

    详解如何在Pandas中删除常量列

    常数列不提供可变性,这意味着它们无助于区分不同的数据点,在许多机器学习模型中,这些列会引入冗余或不相关的数据,从而对性能产生负面影响,因此,通常必须删除常量列,所以本文我们将探索如何使用Python识别和删除Pandas DataFrame中的常量列,需要的朋友可以参考下
    2025-03-03
  • python xxx.py 和 python -m xxx两种执行方式的使用场景和问题解决

    python xxx.py 和 python -m xxx两种执行方式

    本文主要介绍了python xxx.py 和 python -m xxx两种执行方式的使用场景和问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-12-12

最新评论