2016-05-26 19 views
0

私のPythonコードはJSON POST要求をサービスに送信し、情報を含むJSONを返します。Pythonフィルター固有の投稿応答

マイコード:私は取得

for username in data: 
    for text in data[username]: 
     body = json.dumps({ "text": text['text'], "extract_type": "mitie"}) 
     r = requests.post('http://localhost:3003/api/extract/run', data=body, headers=headers) 
     print "---New Request---" 
     print (r.content) 

応答:私はそれが"tag":"LOCATION"を持っているかどうかを確認して、変数にlabelを抽出しようとしています

---New Request--- 
[{"score":0.6997741063788492,"tag":"LOCATION","label":"USA"}, 
{"score":1.0501661504998254,"tag":"MISC","label":"European"}] 
---New Request--- 
[{"score":0.12021601772708868,"tag":"ORGANIZATION","label":"NFL"}] 
---New Request--- 
[{"score":0.16843877285343356,"tag":"MISC","label":"Watermel"}, 
{"score":0.46122731000101685,"tag":"MISC","label":"Professional"}, 
{"score":0.6470543353899144,"tag":"LOCATION","label":"USA"}] 

私は

for username in data: 
    for text in data[username]: 
     #print text['text'] 
     body = json.dumps({ "text": text['text'], "extract_type": "mitie"}) 
     r = requests.post('http://54.174.131.124:3003/api/extract/run', data=body, headers=headers) 
     print "---New Request---" 
     print (r.content) 

     if "LOCATION" in r.content['tag']: 
      location = r.content['label'] 

を追加しようとしましたが、私はリクエストにTypeError: string indices must be integers, not str

+0

JSONであることがわかっているので、['r.json()'](http://docs.python-requests.org/ja/master/user/quickstart/#json-response-content)を試してみてください。 ? – jonrsharpe

+0

@jonrsharpeどこに追加すればよいですか?私が考えるif問題はif文にありますが、どうやってそれを行うのかは分かりません。 'r.content'は、私の応答に表示されている部分なので、部分的に動作します。 – Joey

+0

'r.json()。get( 'tag')== 'LOCATION':...'?辞書を読む。 – jonrsharpe

答えて

0

エラーを取得し、repsonse contentは文字列で生応答です。あなたはdictとしてそれを使用しようとしています。そのため、r.content['tag']はTypeErrorを発生させます。

応答jsonデータを使用するには、r.json()を使用してjson応答をデコードする必要があります。 dictsのリスト(質問のjsonデータ、デコードされたもの)を返します。このタグは、 'tag'でフィルタリングしてラベルを抽出することができます。

+0

私は 'デコード= r.json() '' 場合decoded.get( "タグ")== 'LOCATION' で私のコードでif文を置き換えます'AttributeError:' list 'オブジェクトに属性' get 'がありません。 これでr.contentとr.json()の違いを理解できましたが、なぜこれが動作しないのか分かりません。 – Joey

+0

@ジョイああ、申し訳ありません。 JSONは辞書のリスト*です。 – jonrsharpe

+0

あなたのデータはjsonオブジェクトのリストなので、Pythonのdictsのリストにデコードされます。だからあなたのコードでは、 'decoded'はリスト(dict)ですが、dictではなく' decoded.get( "tag") 'が失敗するのです。しかし、 'decoded [0] .get(" tag ")'、 'decoded [1] .get(" tag ")'などは期待通りに動作します。 – kobigro

関連する問題