尝试找到对嵌套json数据进行排序的最简单方法。到目前为止,我所尝试的一切似乎都失败了。我使用的是Python 2.7,并尝试按名称属性排序。这是我尝试过的众多python示例中的一个:
def sort_json(self,json_data):
data_obj = json.dumps(json_data,sort_keys=True)
return sorted(data_obj["data"]["workflows"]["allWorkflows"],
key=lambda d: d["name"])
下面是一个未排序的json示例:
{
"data": {
"workflows": {
"allWorkflows": [{
"name": "ICX-SLX Config Basic Support",
"version": 106,
"path": "/Workflows/System/Config/Basic Support/ICX-SLX Config Basic Support"
}, {
"name": "ICX Upgrade Firmware",
"version": 37,
"path": "/Workflows/System/Inventory/Upgrade/ICX Upgrade Firmware"
}, {
"name": "Quarantine_PCAP_Flow",
"version": 357,
"path": "/Workflows/System/Security/Quarantine_PCAP_Flow"
}, {
"name": "ICX-MLX Backup Configuration",
"version": 101,
"path": "/Workflows/System/Inventory/Backup/ICX-MLX Backup Configuration"
}, {
"name": "ICX-SLX-MLX Restart Device",
"version": 15,
"path": "/Workflows/System/Inventory/Restart/ICX-SLX-MLX Restart Device"
}, {
"name": "Revert_Quarantine_End_System",
"version": 169,
"path": "/Workflows/System/Security/Revert_Quarantine_End_System"
}]
}
}
}
任何工作中的例子都会非常感谢。
发布于 2018-12-04 04:01:57
嗨,Bill:我认为复杂性来自于json文件的三重嵌套。一旦我去掉了开销层并创建了一个新的{name: version,path}字典,那么我就可以排序了:(这可能比你想要的要麻烦一些,但至少它让我明白了这个问题。希望这能对您有所帮助!)
import json
with open("sample.json") as json_data:
d = json.load(json_data)
key = 'data'
key2 = 'workflows'
key3 = 'allWorkflows'
list1 = []
list2 = []
list3 = []
for k in d[key][key2][key3]:
name_d = k
list1.append(name_d['name'])
list2.append(name_d['version'])
list3.append(name_d['path'])
mydict = {i:[j, k] for i, j, k in zip(list1, list2, list3)}
print(sorted(mydict.items()))
发布于 2022-01-15 00:42:18
您可以使用(部分完整的)递归解决方案来处理更多级别/嵌套:
input.json
{"foo": {"bar": [3,2,1], "bax": {"buz": [6,5,4]}}, "too": [9,8,7], "farm": [{"boo": [7,6]}, {"coo": ["def", "abc"]}, {"loo": {"dog": [6,9,1], "cat": [{"fog": [3,2,1]}]}}]}
expected.json
{"foo": {"bar": [1,2,3], "bax": {"buz": [4,5,6]}}, "too": [7,8,9], "farm": [{"boo": [6,7]}, {"coo": ["abc", "def"]}, {"loo": {"dog": [1,6,9], "cat": [{"fog": [1,2,3]}]}}]}
函数
def sort_json(payload: Dict) -> Dict:
for k, v in payload.items():
if isinstance(v, dict):
sort_json(v)
else:
if all(isinstance(x, int) or isinstance(x, str) for x in v):
v.sort()
if all(isinstance(x, dict) or isinstance(x, dict) for x in v):
for j in v:
sort_json(j)
return payload
https://stackoverflow.com/questions/53600076
复制相似问题