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