使用python,尝试解析字典中的每个键值。我能够解析键值,而键值又是另一个字典。但是我现在停留在解析该内部字典中的列表的位置。下面是JSON结构。
json_struct = {
"Name":"John",
"Age":"30",
"State":"NC",
"xxxx":{
"xxxx1":"1111111",
"xxxx2":"222222",
"xxxx3":[
{
"aaa1": "333",
"aaa2":"444"
},
{
"bbb1": "555",
"bbb2":"666"
}
]
}
}
进行迭代的代码段:
def check1(json_struct):
for k, v in json_struct.items():
if isinstance(v, OrderedDict):
check1(v)
else:
print "{0} : {1}".format(k, v)
实际输出:
Name:John
Age:30
state:NC
xxxx1:1111111
xxxx2:222222
xxxx3:[('aaa1','333'), ('aaa2':'444'), ('bbb1:555'), ('bbb2:666')]
预期输出:
Name:John
Age:30
state:NC
xxxx1:1111111
xxxx2:222222
aaa1:333
aaa2:444
bbb1:555
bbb2:666
我遗漏了一些要遍历的列表,但我也尝试了isinstance
中包含列表if
的{{1}},仍然是我得到的错误结果。
任何对此的知识共享将受到高度赞赏。
谢谢!
答案 0 :(得分:1)
有两个问题:
您正在检查类型OrderedDict
,但这可能特定于您使用的Python版本;在Python 3.x上,您应改为检查dict
;
aaa1
和类似的值在列表内,在[]
之间,这就是您所看到的输出。
这也是您要检查的内容:
def check1(json_struct):
for k, v in json_struct.items():
if isinstance(v, OrderedDict):
check1(v)
elif isinstance(v, list):
for e in v:
check1(e)
else:
print "{0} : {1}".format(k, v)
在使用Python 3版本时,您可能需要dict
而不是OrderedDict
。