我有一个像这样的json文件:
{
"abc": {
"key1": "val1"
},
"xyz": {
"key2": "val2"
},
"pqr": {
"key3": "val3"
},
"123": {
"key4": "val4"
}
}
我想检查文件是否按顶级键排序。我怎么做?谢谢
这是我正在使用的代码:
import json
sorted_json_data = None
filename = 'data.json'
try:
with open(filename, "r") as f:
json_data = json.load(f)
sorted_json_data = json.dumps(json_data, sort_keys=True, indent=4)
except ValueError as err:
print(f"{filename}: Failed to decode: {err}")
if sorted_json_data is not None:
print(f"{filename}: File is not sorted")
else:
print(f"{filename}: File is sorted")
但似乎总是说“文件未排序”。
正如其他评论所述,json 标准没有属性顺序之类的东西。
但是,如果我们做出“未经测试的假设”,即 json 模块按照读取的顺序将键添加到字典中。并且您使用 Python 3.7+ 来获得保持插入顺序的字典。 你可以这样做:
with open(filename, "r") as f:
json_data = json.load(f)
sorted_json_data = list(json_data) == list(json_data).sort()
但请记住,这仅检查属性是否按某种顺序打印。这并不意味着 json 标准的任何其他实现都必须遵守该顺序。
由此得出结论,如果您必须依赖 json 文件的属性排序,您有两个选择:
将文件格式更改为其规范中具有属性顺序的格式。
json_data = json.load(f)
json_data = {k: json_data[k] for k in sorted(json_data)}