不带解析的Python JSON键

不带解析的Python JSON键,python,json,parsing,Python,Json,Parsing,我需要从JSON格式的文本中获取主键(设备),其中包含大约70.000个(子)键/对象 看起来是这样的: { "1":{...........} "4":{...........} "9":{...........} } 我需要得到“1”,“4”和“9”。但是我现在这样做的话,需要大约2分钟的时间来解析文本 json = json.loads(response.text) #this takes so long! devices = json.keys() 因为我是用树莓皮

我需要从JSON格式的文本中获取主键(设备),其中包含大约70.000个(子)键/对象 看起来是这样的:

{
   "1":{...........}
   "4":{...........}
   "9":{...........}
}
我需要得到“1”,“4”和“9”。但是我现在这样做的话,需要大约2分钟的时间来解析文本

json = json.loads(response.text) #this takes so long!
devices = json.keys()
因为我是用树莓皮做的

有更好的办法吗

编辑: 我从运行在以下服务器上的JSON API接收数据:

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

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


您可以使用面向流的迭代JSON解析器来完成,但需要单独安装。试一试,它将为遇到的每个JSON结构发出事件:

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

你有没有尝试过只用一台设备?对于大多数RESTful web服务,如果您看到如下URL:

{
   "1":{...........}
   "4":{...........}
   "9":{...........}
}
“http://.../ZWaveAPI/Run/devices"

您可能通过以下方式获得单个设备:

“http://.../ZWaveAPI/Run/devices/1"


如果它能工作,它将大大减少您必须下载和解析的数据量。

使用数据库,只在需要时查询您需要的数据?我无法更改我获得的数据。。。我收到一个有很多键的文本,我需要得到主键。。。或者我获取数据的方式有可能吗?(请参见编辑)但这只会在解析时调用事件,不是更快,还是更快?它会让您更快地访问中间结果,因为您可以在加载整个内容之前获得它们。它还将使用更少的内存,因为您不会构建一个巨大的数据结构,其中充满了您不打算使用的内容。所以它至少应该快一点。@TeNNoX:无论如何,你必须扫描中间结果才能找到你感兴趣的键。但是使用流式解析器,您不需要为整个数据集创建python对象,这会加快速度。但事件并不是真的必要,因为我需要等待一切结束,对吗?@TeNNoX:它需要一个类似文件的对象;传入
urlopen()
的结果,而不自己调用
.read()
。是的,但我需要所有文件的有效列表。我不能尝试所有的数字。。。顺便说一句,我现在用ijson将时间缩短到3秒,如EDIT3所示