python迭代json文件,其中json结构和键值未知
作者:互联网
考虑下面的示例JSON.
{
"widget": {
"test": "on",
"window": {
"title": "myWidget1",
"name": "main_window"
},
"image": {
"src": "Images/wid1.png",
"name": "wid1"
}
},
"os":{
"name": "ios"
}
}
考虑我们不知道JSON的结构和任何键的情况.我需要实现的是一个python函数,它遍历所有的键和子键并打印键.这只是通过知道JSON文件名,我应该能够迭代整个键和子键. JSON可以是任何结构.我试过的是下面给出的.
JSON_PATH = "D:\workspace\python\sampleJSON.json"
os.path.expanduser(JSON_PATH)
def iterateAllKeys(e):
for key in e.iterkeys():
print key
for child in key.get(key):
iterateAllKeys(child)
with open(JSON_PATH) as data_file:
data = json.load(data_file)
iterateAllKeys(data)
这里,iterateAllKeys()函数应该打印JSON文件中存在的所有键.但是如果只存在外环,即
def iterateAllKeys(e):
for key in e.iterkeys():
print key
它将打印键“widget”和“os”.但,
def iterateAllKeys(e):
for key in e.iterkeys():
print key
for child in key.get(key):
iterateAllKeys(child)
返回错误 – AttributeError:’unicode’对象没有属性’get’.我的理解是 – 由于’child’的值不是dict对象,我们不能应用’key.get()’.但是有没有其他方法可以迭代JSON文件而不指定任何键名.谢谢.
解决方法:
您可以使用递归来迭代多级字典,如下所示:
def iter_dict(dic):
for key in dic:
print(key)
if isinstance(dic[key], dict):
iter_dict(dic[key])
迭代第一个字典的键并打印每个键,如果该项是dict类的实例,我们可以使用递归来迭代我们作为项目遇到的字典.
标签:json,python,serialization,deserialization,getjson 来源: https://codeday.me/bug/20190611/1217851.html