大家好,我下面有条json短信
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...",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}}
我创建了一个函数,它可以获得json所有字段的路径。如下所示:
def get_paths(source):
paths = []
if isinstance(source, collections.MutableMapping): # found a dict-like structure...
for k, v in source.items(): # iterate over it; Python 2.x: source.iteritems()
paths.append([k]) # add the current child path
paths += [[k] + x for x in get_paths(v)] # get sub-paths, extend with the current
# else, check if a list-like structure, remove if you don't want list paths included
elif isinstance(source, collections.Sequence) and not isinstance(source, str):
# Python 2.x: use basestring instead of str ^
for i, v in enumerate(source):
paths.append([i])
paths += [[i] + x for x in get_paths(v)] # get sub-paths, extend with the current
return paths现在您可以看到如下所示的所有路径:
[['glossary'],
['glossary', 'title'],
['glossary', 'GlossDiv'],
['glossary', 'GlossDiv', 'title'],
['glossary', 'GlossDiv', 'GlossList'],
['glossary', 'GlossDiv', 'GlossList', 'GlossEntry'],
['glossary', 'GlossDiv', 'GlossList', 'GlossEntry', 'ID'],
['glossary', 'GlossDiv', 'GlossList', 'GlossEntry', 'SortAs'],
['glossary', 'GlossDiv', 'GlossList', 'GlossEntry', 'GlossTerm'],
['glossary', 'GlossDiv', 'GlossList', 'GlossEntry', 'Acronym'],
['glossary', 'GlossDiv', 'GlossList', 'GlossEntry', 'Abbrev'],
['glossary', 'GlossDiv', 'GlossList', 'GlossEntry', 'GlossDef'],
['glossary', 'GlossDiv', 'GlossList', 'GlossEntry', 'GlossDef', 'para'],
['glossary', 'GlossDiv', 'GlossList', 'GlossEntry', 'GlossDef', 'GlossSeeAlso'],
['glossary', 'GlossDiv', 'GlossList', 'GlossEntry', 'GlossDef', 'GlossSeeAlso', 0],
['glossary', 'GlossDiv', 'GlossList', 'GlossEntry', 'GlossDef', 'GlossSeeAlso', 1],
['glossary', 'GlossDiv', 'GlossList', 'GlossEntry', 'GlossSee']]如何遍历路径列表以获得json每个字段的值?
发布于 2019-06-13 13:45:17
Python提供了json模块,它可以将JSON文件读入python数据结构:
import json
with open("my_file.json", "r") as my_file:
contents = json.loads(my_file.read())在此之后,您可以将其视为dict。
title = contents["glossary"]["title"]
glossDivTitle = contents["glossary"]["glossDiv"]["title"]
para = contents["glossary"]["glossDiv"]["glossList"]["glossEntry"]["glossDef"]["para"]
...现在,假设您有这样一个列表,您在问题中创建了这样的列表:
lk = ['glossary', 'GlossDiv', 'GlossList', 'GlossEntry', 'Acronym']下面是一个可以用来检索相关值的函数:
def retrieve_value(key_list, dct):
subdict = dct
for k in key_list:
subdict = subdict[k]
return subdict
retrieve_value(lk, contents)发布于 2019-06-13 13:45:37
我建议您使用json库。json.asp您可以使用json.loads将json转换为dict,您可以通过dict_name[key]访问一个值。
在编写函数之前,尝试找到一个库。
https://stackoverflow.com/questions/56581729
复制相似问题