在Python中处理/解析复杂的嵌套JSON

时间:2019-01-17 04:03:55

标签: python json parsing dictionary ordereddictionary

使用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}},仍然是我得到的错误结果。

任何对此的知识共享将受到高度赞赏。

谢谢!

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