首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无需解析的Python键

无需解析的Python键
EN

Stack Overflow用户
提问于 2013-04-04 20:17:52
回答 2查看 960关注 0票数 3

我需要从具有大约70.000 (子)键/对象的JSON格式文本中获取主键(设备),如下所示:

代码语言:javascript
运行
复制
{
   "1":{...........}
   "4":{...........}
   "9":{...........}
}

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

代码语言:javascript
运行
复制
json = json.loads(response.text) #this takes so long!
devices = json.keys()

因为我用的是树莓派!

有更好的办法吗?

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

代码语言:javascript
运行
复制
http://.../ZWaveAPI/Run/devices #this is an array

EDIT3:

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

代码语言:javascript
运行
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-04 20:27:02

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

代码语言:javascript
运行
复制
for prefix, event, value in parser:
    if event == 'map_key':
        print value
票数 5
EN

Stack Overflow用户

发布于 2013-04-05 00:33:19

你试过试着只买一个设备吗?对于大多数RESTful web服务,如果您看到这样的URL:

"h ttp://./ZWaveAPI/Run/设备“

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

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

如果它有效的话,它将大大减少您必须下载和解析的数据量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15820916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档