2016-07-01 4 views
2

このJSON出力をPythonで解析しようとすると、何が欠けていますか? JSONは次のようになります。このJSON出力を解析すると、何が欠けていますか

{ 
    "start": 0, 
    "terms": [ 
    "process_name:egagent.exe" 
    ], 
    "highlights": [], 
    "total_results": 448, 
    "filtered": {}, 
    "facets": {}, 
    "results": [ 
    { 
     "username": "SYSTEM", 
     "alert_type": "test" 
    }, 
    { 
     "username": "SYSTEM2", 
     "alert_type": "test" 
    } 
    ] 
    } 

私はこれにアクセスするために使用しようとしているPythonは簡単です。私はユーザー名を取得したいが、私が試したものはすべてエラーを投げる。それはエラーをスローしない場合、私はそれぞれの手紙を得るようです。だから私がすれば:

apirequest = requests.get(requesturl, headers=headers, verify=False) 
readable = json.loads(apirequest.content) 

#print readable 
for i in readable: 
    print (i[0]) 

私は、各項目の最初の文字であるs、t、h、t、f、f、rを得る。私が[1]しようとすると、私は各項目の2番目の文字を取得します。名前で試してみると、私は文字列のインデックスが整数でなければならないというエラーが出ます。私はかなり混乱していて、私はPythonを初めて使っていますが、まだこれについて何も見つかりませんでした。助けてください!私はユーザー名フィールドにアクセスしたいので、forループを実行しようとしています。前もって感謝します!

+0

キーを取得します。 readable.items()のkey、valueに 'を試してください:'! –

+0

可能な複製http://stackoverflow.com/a/16129667/5922757 – Jezor

答えて

0

readableがJSONオブジェクト(dict)の場合、キーを使用して、すべてのマップのような要素にアクセスできます。

readable["results"][0]["username"] 

結果として"SYSTEM"文字列を返す必要があります。

for result in readable["results"]: 
    print(result["username"]) 

あなたのJSONがstrオブジェクトである場合、あなたはdeserialize it with json.loads(readable) firstにあります、すべてのユーザ名を印刷行うに

+0

ありがとう!私は今それを得ることができますが、それは私を特定の数に制限しています。その出力には400程度あるはずですが、私は10のようにしか見えません。それぞれの結果の各ユーザー名を解析するためにforループを調整して、それぞれを取得する必要がありますか?私はイテレータを追加しましたが、それは各ループに追加されていますが、それは10程度かかります。だから、私は私が読めるようにしておきます:print( "results" [count] ["username"])count + = 1 – CluelessJSMan

+0

あなたはもっとコードを表示しなければならないでしょう。あまりにも多くのオブジェクトを '...'で置き換えてください)。あなたが得た '結果'の数は関係ありません。 – Jezor

2

この試してみてください:あなたのJSON文字列をロードし

for i in readable["results"]: 
    print i["username"] 
2

を:すべての結果のための

import json 

s = """ 
{ 
    "start": 0, 
    "terms": [ 
    "process_name:egagent.exe" 
    ], 
    "highlights": [], 
    "total_results": 448, 
    "filtered": {}, 
    "facets": {}, 
    "results": [ 
    { 
     "username": "SYSTEM", 
     "alert_type": "test" 
    }, 
    { 
     "username": "SYSTEM2", 
     "alert_type": "test" 
    } 
    ] 
} 
""" 

そして、印刷ユーザ名:

print [res['username'] for res in json.loads(s)['results']] 

出力:

[u'SYSTEM', u'SYSTEM2'] 
1

for i in readableは、readable辞書の各キーを使用してiを繰り返します。 i[0]を印刷すると、各キーの最初の文字が印刷されます。

あなたは"results"キーに関連付けられているリストのエントリで"username"キーに関連付けられている値は、あなたがこのようにそれらを得ることができますしたいことを考える:あなたは、あなたが辞書を反復処理する場合

for result in readable["results"]: 
    print (result["username"]) 
関連する問題