Python从json.loads中获取数据的问题

时间:2014-01-27 11:03:46

标签: python json

我有以下JSON数据,我通过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"
      }
   ]
}

我正在尝试从中获取所有数据,但我无法引用数据。 我的代码如下:

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,因为它是存储在数据库中的方式。

2 个答案:

答案 0 :(得分:2)

您对原始数据序列化的方式有疑问。每个元素的attributes dict没有被序列化为一组嵌套的dicts,而是作为包含内部dicts的Python字符串表示的外部dict。

您应该发布执行原始序列化的代码。

答案 1 :(得分:0)

由于dict inside属性最终作为字符串表示形式,我使用以下代码将其转换为dict:

for object in r['objects']:
    attrib = []
    attrib =  ast.literal_eval(object['attributes'])
    print attrib['code']