如何让 json.dumps 序列化时对键排序(sort_keys)

来源:网站建设作者:广州GEO公司头衔:草根站长
导读:本期聚焦于小伙伴创作的《如何让 json.dumps 序列化时对键排序(sort_keys)》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何让 json.dumps 序列化时对键排序(sort_keys)》有用,将其分享出去将是对创作者最好的鼓励。

在Python的json模块中,dumps函数用于将Python对象序列化为JSON格式的字符串,默认情况下序列化字典时,键的顺序和字典原本的插入顺序或者Python解释器的内部存储顺序有关,并不保证有序。如果需要对序列化后的键进行排序,只需要使用sort_keys参数即可实现。

如何让 json.dumps 序列化时对键排序(sort_keys)

sort_keys 参数的基本用法

json.dumps函数的sort_keys参数是一个布尔类型的参数,默认值为False,当将其设置为True时,序列化过程中会对字典的所有键按照升序进行排序,然后再生成JSON字符串。

下面是一个最简单的使用示例:

import json

# 定义一个无序的字典
data = {
    "name": "张三",
    "age": 25,
    "city": "北京",
    "score": 98.5
}

# 不使用sort_keys参数,默认序列化
default_result = json.dumps(data, ensure_ascii=False)
print("默认序列化结果:", default_result)

# 使用sort_keys=True,对键排序后序列化
sorted_result = json.dumps(data, ensure_ascii=False, sort_keys=True)
print("键排序后序列化结果:", sorted_result)

运行上述代码后,默认序列化结果的键顺序和字典定义的顺序一致,而设置sort_keys=True后的结果中,键会按照字母升序排列为age、city、name、score。

嵌套字典的排序规则

当字典中存在嵌套的字典结构时,sort_keys参数会对每一层的字典键都进行排序,不会只处理最外层的键。

示例代码如下:

import json

# 定义包含嵌套字典的数据
nested_data = {
    "z_field": "z值",
    "a_field": {
        "b_sub": "b子值",
        "a_sub": "a子值"
    },
    "m_field": "m值"
}

# 对嵌套字典排序序列化
sorted_nested = json.dumps(nested_data, ensure_ascii=False, sort_keys=True)
print("嵌套字典排序结果:", sorted_nested)

上述代码的输出结果中,最外层的键会排序为a_field、m_field、z_field,而a_field对应的嵌套字典中的键也会排序为a_sub、b_sub。

排序的注意事项

  • sort_keys的排序规则是按照键的Unicode码点进行升序排列,对于字符串类型的键,排序结果和字符串的默认排序规则一致。
  • 如果字典的键不是字符串类型,比如是整数、浮点数等,同样会按照对应类型的排序规则进行升序排列。
  • sort_keys参数只会对字典类型的键进行排序,对于列表、元组等其他可序列化类型的元素顺序没有影响。
  • 当同时设置sort_keys和indent参数时,排序功能依然生效,格式化后的JSON字符串中键的顺序依然是有序的。

下面是结合indent参数的示例:

import json

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

# 同时设置缩进和键排序
formatted_result = json.dumps(data, sort_keys=True, indent=4)
print("格式化且键排序的结果:")
print(formatted_result)

该代码输出的JSON字符串不仅每个键值对都有缩进,而且键的顺序为a、b、c,符合排序的预期效果。

json_dumpssort_keysPython序列化修改时间:2026-06-28 11:24:22

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。