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

2024-09-28 19:09:34 发布

您现在位置:Python中文网/ 问答频道 /正文

使用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中的ifwith list,仍然得到了不正确的结果。你知道吗

任何关于这方面的知识分享都将不胜感激。你知道吗

提前谢谢!你知道吗


Tags: namejson列表age字典johnstruct键值
1条回答
网友
1楼 · 发布于 2024-09-28 19:09:34

有两个问题:

  • 您正在检查类型OrderedDict,但这可能是特定于您使用的Python版本的;在python3.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)

在使用python3版本时,可能需要dict而不是OrderedDict。你知道吗

相关问题 更多 >