3

約 70.000 個の (サブ) キー/オブジェクトを含む JSON 形式のテキストからメイン キー (デバイス) を取得する必要があります。次のようになります。

{
   "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 秒間実行されます! :)

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
4

2 に答える 2

5

ストリーム指向の反復 JSON パーサーを使用して実行できますが、別途インストールする必要があります。を試してみてください。検出されたijsonJSON 構造ごとにイベントが発行されます。

for prefix, event, value in parser:
    if event == 'map_key':
        print value
于 2013-04-04T20:27:02.643 に答える
0

デバイスを 1 つだけ入手して試してみましたか? ほとんどの RESTful Web サービスで、次のような URL が表示される場合:

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

おそらく、次の方法で個々のデバイスを取得できます。

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

これが機能する場合、ダウンロードして解析する必要があるデータの量が大幅に削減されるはずです。

于 2013-04-05T00:33:19.093 に答える