Обработка / анализ сложных вложенных JSON в Python - PullRequest
0 голосов
/ 17 января 2019

Используя 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 голосов
/ 17 января 2019

Есть два вопроса:

  • вы проверяете тип 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)

Может потребоваться dict вместо OrderedDict при использовании версий Python 3.

...