【发布时间】:2022-01-02 21:07:53
【问题描述】:
如果字典键被重新排序,我需要确保json.dumps 生成的字符串永远不会改变。
通过测试,通过 sort_keys=True 确实可以解决问题,并且它确实递归地确保了字段已排序。
但是official docs 对递归的性质/行为不清楚和模棱两可。
如果 sort_keys 为真(默认:假),则输出字典 将按键排序;这对于回归测试很有用,以确保 JSON 序列化可以在日常基础上进行比较。
我应该编写自己的递归函数以递归方式转储密钥还是依赖 python 来完成。
import json
a = {
"one": "one",
"nested": {
"two": "two",
"three": "three",
"nested": {
"four": "four",
"five": "five"
}
}
}
a_str = json.dumps(a, sort_keys=True)
print(a_str)
b = {
"nested": {
"three": "three",
"two": "two",
"nested": {
"five": "five",
"four": "four"
}
},
"one": "one"
}
b_str = json.dumps(b, sort_keys=True)
print(b_str)
print(a_str == b_str) # prints true
assert a_str == b_str
assert a_str != json.dumps(b) # Works as sort_keys is False by default
【问题讨论】:
-
是的,所有嵌套字典也将具有排序键。