如何使用 pymongo 获取 Json 文档的所有键?
How to get all the keys of a Json document using pymongo?
我有一份以下格式的文件,
{
"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"
}
}
}
}
}
我需要获取所有键,包括嵌套键。但是我只能得到第一级的钥匙,例如:glossary.
谁能告诉我,有什么办法可以找回所有的密钥吗?
您可以使用递归函数挖掘每一层并打印密钥。
def recurse_keys(document):
for key in document.keys():
print(str(key))
if isinstance(document[key], dict):
recurse_keys(document[key])
更新:
对于嵌套格式
def recurse_keys(document,parent):
for key in document.keys():
if parent!="":
print(parent+'.'+str(key))
else:
print str(key)
if isinstance(document[key], dict):
if parent!="":
recurse_keys(document[key],parent+'.'+str(key))
else:
recurse_keys(document[key],str(key))
from re import findall
input_dict = {
"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"
}
}
}
}
}
dict1=str(input_dict)
pattern = r"'([A-Za-z0-9_\./\-]*)':"
m = findall(pattern, dict1)
print m
米是:-
['glossary', 'GlossDiv', 'GlossList', 'GlossEntry', 'GlossDef', 'GlossSeeAlso', 'para', 'GlossSee', 'Acronym', 'GlossTerm', 'Abbrev', 'SortAs', 'ID', 'title', 'title']
让我告诉你这个如果你只是想拥有所有键就可以正常工作,但如果你希望它们采用嵌套形式,那么最好进行递归方式。完成后将提供递归代码。
如果我当前的解决方案可以进行一些改进,请提出建议。
我有一份以下格式的文件,
{
"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"
}
}
}
}
}
我需要获取所有键,包括嵌套键。但是我只能得到第一级的钥匙,例如:glossary.
谁能告诉我,有什么办法可以找回所有的密钥吗?
您可以使用递归函数挖掘每一层并打印密钥。
def recurse_keys(document):
for key in document.keys():
print(str(key))
if isinstance(document[key], dict):
recurse_keys(document[key])
更新: 对于嵌套格式
def recurse_keys(document,parent):
for key in document.keys():
if parent!="":
print(parent+'.'+str(key))
else:
print str(key)
if isinstance(document[key], dict):
if parent!="":
recurse_keys(document[key],parent+'.'+str(key))
else:
recurse_keys(document[key],str(key))
from re import findall
input_dict = {
"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"
}
}
}
}
}
dict1=str(input_dict)
pattern = r"'([A-Za-z0-9_\./\-]*)':"
m = findall(pattern, dict1)
print m
米是:- ['glossary', 'GlossDiv', 'GlossList', 'GlossEntry', 'GlossDef', 'GlossSeeAlso', 'para', 'GlossSee', 'Acronym', 'GlossTerm', 'Abbrev', 'SortAs', 'ID', 'title', 'title']
让我告诉你这个如果你只是想拥有所有键就可以正常工作,但如果你希望它们采用嵌套形式,那么最好进行递归方式。完成后将提供递归代码。
如果我当前的解决方案可以进行一些改进,请提出建议。