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 Numpy之linspace用法说明

    Python Numpy之linspace用法说明

    这篇文章主要介绍了Python Numpy之linspace用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • 关于Python的pymouse click 双击的问题

    关于Python的pymouse click 双击的问题

    这篇文章主要介绍了关于Python的pymouse click 双击的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Django多层嵌套ManyToMany字段ORM操作详解

    Django多层嵌套ManyToMany字段ORM操作详解

    这篇文章主要介绍了Django多层嵌套ManyToMany字段ORM操作详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Python扫描IP段查看指定端口是否开放的方法

    Python扫描IP段查看指定端口是否开放的方法

    这篇文章主要介绍了Python扫描IP段查看指定端口是否开放的方法,涉及Python使用socket模块实现端口扫描功能的相关技巧,需要的朋友可以参考下
    2015-06-06
  • 使用rpclib进行Python网络编程时的注释问题

    使用rpclib进行Python网络编程时的注释问题

    这篇文章主要介绍了使用rpclib进行Python网络编程时的注释问题,作者讲到了自己在编写服务器时要用unicode注释等需要注意的地方,需要的朋友可以参考下
    2015-05-05
  • 对Python3中的print函数以及与python2的对比分析

    对Python3中的print函数以及与python2的对比分析

    下面小编就为大家分享一篇对Python3中的print函数以及与python2的对比分析,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • 详解pytest实现mark标记功能详细介绍

    详解pytest实现mark标记功能详细介绍

    这篇文章主要介绍了详解pytest实现mark标记功能详细介绍,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • 如何在Python中编写接口和请求外部接口

    如何在Python中编写接口和请求外部接口

    这篇文章主要介绍了如何在Python中编写接口和请求外部接口,requests库来请求外部接口,按照请求方法分为get请求和post请求,下面和小编一起进入文章了解更多的具体内容吧
    2022-02-02
  • keras小技巧——获取某一个网络层的输出方式

    keras小技巧——获取某一个网络层的输出方式

    这篇文章主要介绍了keras小技巧——获取某一个网络层的输出方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • 基于Python爬取fofa网页端数据过程解析

    基于Python爬取fofa网页端数据过程解析

    这篇文章主要介绍了基于Python爬取fofa网页端数据过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07

最新评论