我想解析一个JSON文件并获得包含所有访问键所需路径的完整列表。如果我们使用keys方法,我们得到的是单个键的列表,而不是访问数据所需的层次键的完整列表。在
所以如果给定的数据是这样的
data = {
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}
我可以返回一个如下所示的列表,其中包含所有键的完整路径。在
^{pr2}$读取和访问元素是可以的。为了得到结果,我试着用这个来回答Access nested dictionary items via a list of keys
我真的不明白它是如何工作的,它只返回单词“glossary”。在
这是我的密码。我使用的是ChainMap,因为它可以更容易地将json转换为字典,并且可以轻松地访问键。在
import json
from collections import ChainMap
from functools import reduce
import operator
myDataChained = ChainMap(data)
def getFromDict(data):
return reduce(operator.getitem, data)
Json_Paths = getFromDict(myDataChained)
print(Json_Paths)
您不能使用与链接答案中相同的方法来执行相反的操作-您没有预先遍历
functools.reduce()/operator.getitem()
组合的路径信息-而是尝试获取该信息,即规范化/扁平化字典结构。在为此,您必须遍历整个结构并收集数据中所有可能的路径,例如:
现在,如果你运行你的
^{pr2}$data
通过它:您将得到
paths
,其中包含:您可以将其中任何一个输入到
functools.reduce()/operator.getitem()
组合框中以获得目标值。在相关问题 更多 >
编程相关推荐