2

Python で次の JSON ファイルをデコードしようとしています。

{"node":[
    {
    "id":"12387",
    "ip":"172.20.0.1",
    "hid":"213", 
    "coord":{"dist":"12","lat":"-9.8257","lon":"65.0880"},
    "status":{"speed":"90","direction":"N"},
    "ts":"12387"}
]
}

以下を使用して:

json_data=open('sampleJSON')
jdata = json.load(json_data)
for key, value in jdata.iteritems():
    print "Key:"
    print key
    print "Value:"
    print value

そして私は出力として持っています:

Key:
node
Value:
[{u'status': {u'direction': u'N', u'speed': u'90'}, u'ip': u'172.20.0.1', u'ts': u'12387', u'coord': {u'lat': u'-9.8257', u'lon': u'65.0880', u'dist': u'12'}, u'hid': u'213', u'id': u'12387'}]

そして、ネストされたオブジェクトstatuscoordのキーと値、およびnode、「hid」、「id」、「ip」、「ts」のキー/値を出力できるようにしたいと考えています。

ネストされたすべての値を相互に処理するにはどうすればよいですか?

前もって感謝します!

4

3 に答える 3

7

再帰関数を使用してすべてを出力できます。これは改善される可能性がありますが、アイデアは次のとおりです。

import json

json_data = open('data.json')
jdata = json.load(json_data)

def printKeyVals(data, indent=0):
    if isinstance(data, list):
        print
        for item in data:
            printKeyVals(item, indent+1)
    elif isinstance(data, dict):
        print
        for k, v in data.iteritems():
            print "    " * indent, k + ":",
            printKeyVals(v, indent + 1)
    else:
        print data

出力

 node:

         status:
             direction: N
             speed: 90
         ip: 172.20.0.1
         ts: 12387
         coord:
             lat: -9.8257
             lon: 65.0880
             dist: 12
         hid: 213
         id: 12387

それ以外の場合は、次を使用できます。

import pprint
pprint.pprint(jdata)
于 2012-10-19T02:11:00.653 に答える
0

特定のユースケースについて詳しく知らなければ、一般的な答えを出すのは難しいですが..

任意にネストされた構造がある場合、これは再帰の良い例です。

簡単なサンプルコード:

def print_object(object, indent=0):
    if type(object)==dict:
        for key, value in object.iteritems():
            print " "*4*indent, "Key: ", key
            print " "*4*indent, "Value: "
            print_object(value, indent+1)
    elif type(object)==list:
        for value in object:
            print_object(value,indent+1)
    else:
        print " "*4*indent, object

厳密な型チェックを行う必要はありませんが、簡単なサンプル コードでは機能します。

出力:

 Key:  node
 Value: 
         Key:  status
         Value: 
             Key:  direction
             Value: 
                 N
             Key:  speed
             Value: 
                 90
         Key:  ip
         Value: 
             172.20.0.1
         Key:  ts
         Value: 
             12387
         Key:  coord
         Value: 
             Key:  lat
             Value: 
                 -9.8257
             Key:  lon
             Value: 
                 65.0880
             Key:  dist
             Value: 
                 12
         Key:  hid
         Value: 
             213
         Key:  id
         Value: 
             12387
于 2012-10-19T02:14:22.427 に答える
-1

JSON の最上位要素は、辞書のリストを含む辞書のようです。この構造を維持したい場合は、以下のコードを試してください。

from pprint import pprint

json_data=open('sampleJSON')
jdata = json.load(json_data)
node = jdata['node'][0]

for key, value in node.iteritems():
    pprint("Key:")
    pprint(key)
    pprint("Value:")
    pprint(value)
于 2012-10-19T02:06:15.897 に答える