检查json文件是否已排序

问题描述 投票:0回答:1

我有一个像这样的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")

但似乎总是说“文件未排序”。

python json python-3.x
1个回答
0
投票

正如其他评论所述,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 文件的属性排序,您有两个选择:

将文件格式更改为其规范中具有属性顺序的格式。
  1. 加载无序的json,对加载的python结构进行排序,然后使用它们。
  2. 例如你可以这样做:

json_data = json.load(f) json_data = {k: json_data[k] for k in sorted(json_data)}

	
© www.soinside.com 2019 - 2024. All rights reserved.