【发布时间】:2017-08-02 16:15:30
【问题描述】:
考虑下面的示例 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' object has no attribute 'get'。我的理解是 - 由于“child”的值不是 dict 对象,我们不能应用“key.get()”。但是有没有其他方法可以在不指定任何键名的情况下迭代 JSON 文件。谢谢。
【问题讨论】:
标签: python json serialization deserialization getjson