我目前有一些代码可以遍历 JSON 文件,获取每个对象并按字母顺序对键值对进行排序。某些键被插入到订单的前面,特别是名称和描述。
def walk_json(data, first=False):
if isinstance(data, (dict)):
if not first:
data = OrderedDict(sorted(data.items()))
for key, value in data.items():
data[key] = walk_json(value)
if isinstance(data, (list)):
for index, item in enumerate(data):
data[index] = walk_json(item)
return data
def validate_json(filename):
fp = None
data = None
try:
fp = open(filename)
except OSError:
print(f"\nERROR {filename}\n")
return
try:
data = json.load(fp, object_pairs_hook=OrderedDict)
except ValueError:
print(f"\nINVALID {filename}\n")
badJSON.append(filename)
return
finally:
fp.close()
if data is None:
print(f"EMPTY {filename}")
return
ordered = OrderedDict()
if "display_name" in data:
ordered["display_name"] = data["display_name"]
if "description" in data:
ordered["description"] = data["description"]
ordered.update(sorted(data.items()))
data = walk_json(ordered, True)
我有另一个文件,它是一个带有单个键的对象build_list
,它是一个包含多个对象的数组。我无法弄清楚如何执行与上述相同的操作,但对于data["build_list"]
. 键在每个对象中按字母顺序排序,但我试图将键"name"
固定到每个对象的开头没有成功。
代码不是我的,所以我不会假装我完全理解它。我只是想稍微适应一下。