2013-09-17 5 views
0

У меня есть строка JSON, что я попал в питон, который выглядит примерно так:Получение определенного элемента из строки JSON

{"count": 100, 
"facets": null, 
"previous_page": null, 
"results": [{"updated_at": "2013-09-17T13:45:13Z", "test_id": 194037042, "customer_id":  
       203793326, "id": 1954182}] 

Есть несколько элементов, но это небольшой надрез, что мне нужно. В основном, результаты имеют список из 100 словарей, которые содержат элементы выше «updated_at, test_id, customer_id, id». Что мне нужно сделать:

Мне нужно получить список всех значений JUST Я бы. Я не уверен, как идти об этом, хотя, я пытался делать такие вещи, как:

for i in my_dict['results']: 
    print i['id'] 

, но я получаю сообщение об ошибке, говорящее:

print i['id'] 
TypeError: string indices must be integers 

Что я делаю неправильно?

+0

Возможный дубликат [Доступ к элементам JSON] (http://stackoverflow.com/questions/16129652/accessing-json-elements) – DevlshOne

+0

Вы преобразовали строку в собственные данные python с помощью 'json.loads'? –

+1

Вы ничего не делаете неправильно, но, возможно, не все ваши данные имеют «результат», который является списком словарей. Возможно, один из ваших «результатов» - это список строк или строк. –

ответ

0

Вы ничего плохого не делаете. Ваши данные включают в себя элементы «null», которые не являются правильными питонами. Это прекрасно работает.

my_dict = {"count": 100, 
"facets": None, 
"previous_page": None, 
"results": [{"updated_at": "2013-09-17T13:45:13Z", "test_id": 194037042, "customer_id": 203793326, "id": 1954182}] 
} 

for i in my_dict['results']: 
    print i['id'] 

ошибка у вас есть означает, что один из элементов списка является строкой, и, когда вы пытаетесь получить элемент [ «ID»] ошибка справедливо говорит вам, что список индексы (строка представляет собой список символы) должны быть целыми числами.

+0

Значения 'null' являются совершенно законными JSON. Фрагмент - это не код Python, а данные JSON. –

0

Похоже, что вы не загрузили в JSON Python с json.loads (json_string)

И даже после того, как вы сделаете это, ваши «результаты» ДИКТ на самом деле будет список dicts.

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

import json 

json_str = '{"count": 100, "facets": null, "previous_page": null, "results": [{"updated_at": "2013-09-17T13:45:13Z", "test_id": 194037042, "customer_id": 203793326, "id": 1954182}, {"updated_at": "2013-09-18T13:45:13Z", "test_id": 194037043, "customer_id": 203793327, "id": 1954183}]}' 

data = json.loads(json_str) 
result_ids = [result['id'] for result in data['results'] if 'id' in result] 

Выход:

[1954182, 1954183] 

Этот код будет затем выводить список, содержащий 1954182 и 1954183. Используйте список понимание здесь для большей скорости и меньше строки кода. Он также гарантирует, что результат dict имеет атрибут id, прежде чем пытаться получить к нему доступ.

+0

Если OP не загрузил данные, 'my_dict ['result']' также не существовал. –

Смежные вопросы