- Данные JSON Я пытаюсь проанализировать данные во фрейм данных или файл CSV.
{
"reports": [
{
"columnHeader": {
"dimensions": [
"ga:date",
"ga:dcmLastEventSitePlacement"
],
"metricHeader": {
"metricHeaderEntries": [
{
"name": "ga:sessions",
"type": "INTEGER"
},
{
"name": "ga:dcmCost",
"type": "CURRENCY"
}
]
}
},
"data": {
"maximums": [
{
"values": [
"2523",
"396.7911"
]
}
],
"minimums": [
{
"values": [
"0",
"0.0"
]
}
],
"rowCount": 503,
"rows": [
{
"dimensions": [
"20191023",
"brand"
],
"metrics": [
{
"values": [
"4",
"0.0"
]
}
]
},
{
"dimensions": [
"20191023",
"brand"
],
"metrics": [
{
"values": [
"13",
"0.0"
]
}
]
}
],
"totals": [
{
"values": [
"4923",
"7914.29571"
]
}
]
}
}
]
}
Код, который я пробовал
class GAReportParser:
def __init__(self, request_response):
self.request_response = request_response
# column_indices = {}
def get_csv(self):
csv_rows = [self.get_header_csv()]
rows = self.request_response['data']['rows']
for row in rows:
# pprint(row['dimensions'])
row_csv = ','.join(row['dimensions'])
metrics = row['metrics']
for metric in metrics:
row_csv += ',' + ','.join(metric['values'])
csv_rows.append(row_csv)
return "\n".join(csv_rows)
def get_header_csv(self):
headers = self.request_response['columnHeader']['dimensions']
metricHeaders = self.request_response['columnHeader'][
'metricHeader']['metricHeaderEntries']
for metricHeader in metricHeaders:
headers.append(metricHeader['name'])
headers_csv = ','.join(headers)
return headers_csv
Ошибка Я получаю
KeyError: 'columnHeader'
Может кто-нибудь, пожалуйста, помогите мне с ошибкой или более простым способом разобрать этот файл в CSV или DF? Я ожидаю, что результат будет
ga: date |ga: dcmLastEventSitePlacement |га: сессии |ga: dcmCost
2019-09-04 |бренд |4 | 0
- редактировать-- 4. ПРАВИЛЬНОЕ решение с помощью @Sadrach Pierre
class GAReportParser:
def __init__(self, request_response):
self.request_response = request_response
def get_csv(self):
print("get_csv is called")
csv_rows = [self.get_header_csv()]
metricHeaders = self.request_response['reports']
for metricHeader in metricHeaders:
for row in metricHeader['data']['rows']:
row_csv = ','.join(row['dimensions'])
metrics = row['metrics']
for metric in metrics:
row_csv += ',' + ','.join(metric['values'])
csv_rows.append(row_csv)
return "\n".join(csv_rows)
def get_header_csv(self):
headers = []
Headers = self.request_response['reports']
for Header in Headers:
for items in Header['columnHeader']['dimensions']:
headers.append(items)
for name in Header['columnHeader']['metricHeader']['metricHeaderEntries']:
headers.append(name['name'])
headers_csv = ','.join(headers)
return headers_csv