没有解析的Python JSON密钥

时间:2013-04-04 20:17:52

标签: python json parsing

我需要从带有大约70.000(子)键/对象的JSON格式文本中获取主键(设备) 它看起来像这样:

{
   "1":{...........}
   "4":{...........}
   "9":{...........}
}

我需要得到“1”,“4”和“9”。但是我现在这样做,用

解析文本大约需要2分钟
json = json.loads(response.text) #this takes so long!
devices = json.keys()

因为我在Raspberry Pi上运行它!

有更好的方法吗?

修改 我从服务器上运行的JSON API收到数据:

http://.../ZWaveAPI/Run/devices #this is an array

EDIT3:

最终工作代码:(运行2-5秒!:)

import ijson.backends.python as ijson
import urllib

parser = ijson.parse(urllib.urlopen("http://.../ZWaveAPI/Run/devices"))
list = []
for prefix,event,value in parser:
    if event == "map_key" and len(prefix) == 0:
        list.append(value)
return list

2 个答案:

答案 0 :(得分:5)

您可以使用面向流的迭代JSON解析器来执行此操作,但您需要单独安装它。试试ijson,它会为遇到的每个JSON结构发出事件:

for prefix, event, value in parser:
    if event == 'map_key':
        print value

答案 1 :(得分:0)

您是否尝试过只获取一台设备?对于大多数RESTful Web服务,如果您看到如下URL:

  

“h ttp://.../ZWaveAPI/Run/devices”

您可能会通过以下方式获取个人设备:

  

“h ttp://.../ZWaveAPI/Run/devices/1”

如果有效,它应该会大大减少您下载和解析的数据量。