2017-10-13 18 views
-1

JSONをUrlでフェッチし、PythonでCSVに変換しますが、エラーが表示されます。下記を参照してください。JSON、URLフェッチ、CSV変換、Python

import requests 
import pprint 
import json 
import csv 
mysession = requests.Session() 

url = 'https://shoiapi.xx.com/api/method/login' 
data = {'usr': '@gmail.com', 'pwd': 'mh'} 
ret=mysession.post(url, data=data) 
response_data_json = ret.json() 
print("---------------Post---------------------\n") 
print(response_data_json) 
stringOfJsonData = json.dumps(response_data_json) 

tempf=open('test.csv', 'a') 
f = csv.writer(tempf) 
f.writerow(["home_page", "message", "full_name"]) 
pprint.pprint(stringOfJsonData) 

for xin in stringOfJsonData: 
    f.writerow([xin["home_page"],xin["message"],xin["full_name"] 
       ]) 

tempf.close() 

print("---------------Out error---------------------\n") 
Error i am geting 

f.writerow([xin["home_page"],xin["message"],xin["full_name"] 
TypeError: string indices must be integers 
print("---------------Out error---------------------\n") 

私は取得していますエラー: 私は取得していますエラー: エラー私は取得しています: f.writerow([XIN [ "home_page"]、XIN [ "メッセージ"]、XIN [」 FULL_NAME "]有効なログインの詳細がなく

TypeError: string indices must be integers 

答えて

0

これを再作成することはできませんが、私はあなたがcsv.DictWriter()を使用するように切り替えることをお勧め:

import requests 
import pprint 
import json 
import csv 

mysession = requests.Session() 

url = 'https://shoaibapi.xxx.com/api/method/login' 
data = {'usr': '[email protected]', 'pwd': 'xxx'} 
ret = mysession.post(url, data=data) 

with open('test.csv', 'w', newline='') as f_output: 
    csv_output = csv.DictWriter(f_output, fieldnames=['home_page', 'message', 'full_name'], extrasaction='ignore') 
    csv_output.writeheader() 
    csv_output.writerow(ret.json()) 

あなたはTest.csvが含まれます:

home_page,message,full_name 
/desk,Logged In,shoaib shaikh 

DictWriterが辞書のエントリを直接操作することができます。作成時に必要なヘッダー名を指定するだけです。 JSONに他のエントリが含まれている場合は、extrasaction='ignore'をパラメータとして指定すると無視されます。

呼び出しを行うと、単一のエントリしか返されないので、ループは必要ありません。ファイルモードをaに変更すると、明らかに既存のファイルに追加されます。この場合、おそらく毎回ヘッダを書き続けることを望まないでしょう。

+0

Fxied、申し訳ありませんが、 'fieldnames'と言ってください。 –

+0

あなたが持っているリクエストはJSONデータを返しません。明らかにJSONとしてHTMLをデコードすると 'JSONDecodeError'が返されます。通常のブラウザでそのURLに行くと 'shoiapi.erpnext.comは存在しません。 ' –

+0

スクリプトはCSVファイルに1つのエントリを与えるようになりました。 –