2015-08-02 3 views
2

Я пытаюсь преобразовать строку json в файл csv. Я получаю error:String Indices must be integers (Все вложенные ключи находятся в правильном формате). Существует ли квадратная скобка для этого?Ошибка: String Индексы должны быть целыми числами

data":[\ 

Ниже файл питон, что я пытаюсь выполнить:

import csv 
import json 

x="""{ 

"response":{"status":1,"httpStatus":200,"data":{"page":1,"current":50,"count":11012,"pageCount":221, 

"data":[\ 
{"Offer":{"name":"abc","id":"884"}, 
"Affiliate":{"company":"POCKET","id":"1494"}, 
"Goal":{"name":null}, 
"Stat":{"year":"2015","month":"03","hour":"11","date":"2015-03-13","impressions":"0","gross_clicks":"1","unique_clicks":"1","clicks":"1","conversions":"0"}}, 

{"Offer":{"name":"qwerty","id":"884"},"Affiliate":{"company":"Rob","id":"1472"},"Goal":{"name":null},"Stat":{"year":"2015","month":"03","hour":"17","date":"2015-03-07","impressions":"0","gross_clicks":"2","unique_clicks":"2","clicks":"2","conversions":"0"}}, 


{"Offer":{"name":"1000","id":"2586"},"Affiliate":{"company":"Iron","id":"1156"},"Goal":{"name":null},"Stat":{"year":"2015","month":"07","hour":"13","date":"2015-07-07","impressions":"0","gross_clicks":"8628","unique_clicks":"8620","clicks":"8628","conversions":"6"}}],"dbSource":"brdb"},"errors":[],"errorMessage":null}}""" 



x = json.loads(x) 

f = csv.writer(open("S2.csv", "w",newline="")) 
# Write CSV Header, If you dont need that, remove this line 
f.writerow(["Offer", "Affiliate", "Goal", "year", "month","hour", "date", "impressions", "gross_clicks", "unique_clicks","clicks","conversions"]) 
print(x) 
for x in x: 
    f.writerow([x["response"]["data"]["data"]["Offer"]["name"], 
       x["response"]["data"]["data"]["Affiliate"]["company"], 
       x["response"]["data"]["data"]["Goal"]["name"], 
       x["response"]["data"]["data"]["Stat"]["year"], 
       x["response"]["data"]["data"]["Stat"]["month"], 
       x["response"]["data"]["data"]["Stat"]["hour"], 
       x["response"]["data"]["data"]["Stat"]["date"], 
       x["response"]["data"]["data"]["Stat"]["impressions"], 
       x["response"]["data"]["data"]["Stat"]["gross_clicks"], 
       x["response"]["data"]["data"]["Stat"]["unique_clicks"], 
       x["response"]["data"]["data"]["Stat"]["clicks"], 
       x["response"]["data"]["data"]["Stat"]["conversions"] 
       ]) 


f.writerow([""]) 

ответ

0

x["response"]["data"]["data"] возвращает список.

So x["response"]["data"]["data"]["Offer"] вызывает ошибку, так как вы пытаетесь получить доступ к ключу Offer в списке. Таким образом, ошибка List Indices must be integers

Попробуйте это:

x["response"]["data"]["data"][0]["Offer"]["name"] 

Где x["response"]["data"]["data"][0] будет иметь доступ к словарю в пределах списка, из которого можно получить доступ ключи "Offer" и "name"

Смежные вопросы