2014-01-27 2 views
0

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

{ 
    "meta":{ 
     "limit":20, 
     "next":null, 
     "offset":0, 
     "previous":null, 
     "total_count":2 
    }, 
    "objects":[ 
     { 
     "attributes":"{u'_code': u'[ON CODE]/[OFF CODE]', u'_type': u'pick actuator or sensor', u'code': u'AF126E/AF1266', u'type': u'actuator'}", 
     "id":1, 
     "module":"/api/v1/module/1/", 
     "moduleName":"rfm_ninjablock (ninjablock)", 
     "name":"HallwayLight" 
     }, 
     { 
     "attributes":"{u'_code': u'[ON CODE]/[OFF CODE]', u'_type': u'pick actuator or sensor', u'code': u'0x53df5c', u'type': u'sensor'}", 
     "id":2, 
     "module":"/api/v1/module/1/", 
     "moduleName":"rfm_ninjablock (ninjablock)", 
     "name":"ToiletDoor" 
     } 
    ] 
} 

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

for object in r['objects']: 
     for attributes in object.iteritems(): 
       print attributes 

Который дает мне:

(u'attributes', u"{u'_code': u'[ON CODE]/[OFF CODE]', u'_type': u'pick actuator or sensor', u'code': u'AF126E/AF1266', u'type': u'actuator'}") 
(u'moduleName', u'rfm_ninjablock (ninjablock)') 
(u'id', 1) 
(u'module', u'/api/v1/module/1/') 
(u'name', u'HallwayLight') 
(u'attributes', u"{u'_code': u'[ON CODE]/[OFF CODE]', u'_type': u'pick actuator or sensor', u'code': u'0x53df5c', u'type': u'sensor'}") 
(u'moduleName', u'rfm_ninjablock (ninjablock)') 
(u'id', 2) 
(u'module', u'/api/v1/module/1/') 
(u'name', u'ToiletDoor') 

Я не совсем уверен, реферирования эти или если на самом деле я делаю это правильно.

Атрибуты уже содержат JSON, так как он хранится в базе данных.

+0

Что вы пытаетесь получить доступ или пытается сделать? –

+0

Получить атрибуты для каждого элемента – PythonLearner

ответ

2

У вас возникла проблема с сериализацией исходных данных. Элемент attributes каждого элемента не был сериализован как набор вложенных dicts, а как внешний dict, содержащий строковые представления Python внутренних dicts.

Вы должны опубликовать код, который сделал оригинальную сериализацию.

+0

Это от tastypie – PythonLearner

0

Как ДИКТ внутри атрибутов заканчивается как строковое представление я использовал следующий код, чтобы преобразовать его в Словаре:

for object in r['objects']: 
    attrib = [] 
    attrib = ast.literal_eval(object['attributes']) 
    print attrib['code'] 
Смежные вопросы