2017-03-18 10 views
1

生のつぶやきをダウンロードするためにTwitterのAPIを使用しています。生のツイート文字列をPythonのJSONオブジェクトに変換する

iterator = twitter_stream.statuses.sample() 
for tweet in iterator: 
    print (json.dumps(tweet)) 
    break 

これらのコマンドの出力正しい形式で全体JSONオブジェクト:彼らは一例に与えたイテレータループは、この(私はここには示されていないループをn回、実行するかの条件を追加しました)のようになります。

は、生のツイートJSONオブジェクトから「テキスト」の項目を抽出するには、私は

txts = [] 
for tweet in iterator: 
    txts.append((json.dumps(tweet)).get("text")) 
    break 
print (txts) 

上に.get(「テキスト」)演算子を使用してみました。しかし、私は「はAttributeErrorというエラーを取得:「STRを'オブジェクトには属性' get 'がありません

私は検索して、json.dumps(ツイート)からファイルへのすべての出力を書き出し、変数にjson.loads(jsonfile)を使用し、テキストをロードするために.get( "text")演算子を使用しようとしました:

fl = open("ipjson.json", "a") 
for tweet in iterator: 
    fl.write(json.dumps(tweet)) 
    break 
fl.flush() 
decode = json.loads(fl) 

for item in decode: 
    txt = item.get("text") 
    txts.append(txt) 
print (txts) 

しかし、これは私に "TypeError:JSONオブジェクトは 'TextIOWrapper'ではなくstrでなければならないというエラーです。

私は間違っていますか?未処理のツイートJSONオブジェクトからテキストを抽出する方が簡単ですか?

+1

'print(json.dumps(tweet)) 'の出力を提供し、そこから得たい正確なデータを指摘できますか? – niemmi

+1

ダンプを実行してからロードする必要はありません。情報は既にtweet変数に入っている可能性があります。 –

答えて

0

JSONファイルは、構造内の
https://stackoverflow.com/a/42855667/3342050
や既知の位置を再帰的にスキャンする必要があります。

あなたのdict、リスト、&エントリを取得した後、あなたが特定の値を通じ解析:これは、返されるどのようなデータに完全に依存している
https://stackoverflow.com/a/42860573/3342050

は、キーはその構造に固有になりますので。あなたは間違ってJSONを扱うている二たとえば

txts = [] 
for status in statuses: 
    txts.append(status.text) 

:あなたはあなただけ行うことができますJSONを必要としない最初例えば

1

txts = [] 
for status in statuses: 
    txts.append(json.dumps(status)) 

with open('ipjson.json','w') as fou: 
    json.dump(txts,fou) 

とバックでそれを読むために:あなたの代わりに行う必要があります

with open('ipjson.json','r') as fin: 
    txts = json.load(fin) 

for txt in txts: 
    print(json.loads(txt)['text']) 

あなたが書いてJSONを読んでいるとき、あなたとダンプ負荷しかしを使用することに注意してくださいダンプを使用している個々のJSONオブジェクトはです。

関連する問題