2016-12-29 1 views
1

У меня есть JSON, который выглядит следующим образом:Python перекручивание через вложенные массивы

[ 
    { 
     "status":"passed", 
     "elements":[{"name":"foo"},{"name":"bar"}] 
    }, 
    { 
     "status":"failed", 
     "elements":[{"name":"foo1"},{"name":"bar1"}] 
    } 
] 

Я пытаюсь перебирать массив элементов:

for a in json['elements']: 
    print a['name'] 

я получаю эту ошибку:

TypeError: list indices must be integers, not str

Мой питон действительно плохой. Спасибо

+0

'json ['elements']' дает вам список из двух элементов: '{" name ":" foo1 "} и {" name ":" bar1 "}', поэтому вам нужно индексировать в него целое число , а не строка. – FlipTack

ответ

0

С кодом вы пытаетесь получить значение ключа 'elements' из словаря json. Но json не является dict, а массив dicts. Таким образом, то, что вы должны сделать вместо этого:

for dic_x in json: 
    for dic_y in dic_x['elements']: 
     print dic_y['name'] 
2

Попробуйте это:

for a in json: 
    for b in a['elements']: 
     print b['name'] 
+0

BTW, ваша структура данных не является JSON, это массив JSON. –

0

Вы должны петлю через list, а затем продолжить свои данные, как то, что вы делаете с dicts как в этом примере:

my_json = [ 
    { 
     "status":"passed", 
     "elements":[{"name":"foo"},{"name":"bar"}] 
    }, 
    { 
     "status":"failed", 
     "elements":[{"name":"foo1"},{"name":"bar1"}] 
    } 
] 

for element in my_json: 
    for v in element["elements"]: 
     print(v["name"]) 

Выход:

foo 
bar 
foo1 
bar1