Конвертировать Json в CSV - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть json в этом формате, и я хочу преобразовать его в файл CSV.

{
  "extrapolationLevel": 1,
  "columnNames": [
    "name",
    "usersession.country",
    "application",
    "usersession.osFamily",
    "usersession.startTime",
    "visuallyCompleteTime"
  ],
  "values": [
    [
      "pdp",
      "Serbia",
      "Desktop",
      "Windows",
      1573215462076,
      1503
    ],

  ]
}

Я хочу преобразовать этот json в формат CSV, вот мой сценарий

import csv
import json

with open('response_1573222394875.json') as infile:
    Data = json.loads(infile.read())

with open("q.csv", "w") as outfile:
    f = csv.writer(outfile)
    f.writerow(["name","usersession.country","application","usersession.osFamily","usersession.startTime","visuallyCompleteTime"])
    f.writerow([Data["name"], Data["usersession.country"],
                Data["application"],
                Data["usersession.osFamily"],
                Data["usersession.startTime"],
                Data["visuallyCompleteTime"]])

Ожидаемый результат

 name usersession.country application usersession.osFamilyusersession.startTime visuallyCompleteTime
      pdp      Serbia      Desktop      Windows      1573215462076      1503
      plp      us           APP           Windows      1573215462076      1548
    startpage  uk            Site         Windows      1573215462076      1639
      product  india      Desktop        Windows      1573215462076      3194
       pdp     Vietnam      APP         Windows        1573215462076      3299

Может ли кто-нибудь помочь мне здесь, пожалуйста.

Ответы [ 2 ]

0 голосов
/ 08 ноября 2019
import json

json_str = '''
{
  "extrapolationLevel": 1,
  "columnNames": [
    "name",
    "usersession.country",
    "application",
    "usersession.osFamily",
    "usersession.startTime",
    "visuallyCompleteTime"
  ],
  "values": [
    [
      "pdp",
      "Serbia",
      "Desktop",
      "Windows",
      1573215462076,
      1503
    ]
  ]
}
'''

data = json.loads(json_str)

csv_row = lambda v: ('"{}",' * len(v)).format(*v)[:-1] # remove trailing comma

print(csv_row(data["columnNames"]))
for value in data["values"]:
    print(csv_row(value))
0 голосов
/ 08 ноября 2019

Ключами Data являются "extrapolationLevel", "columnNames" и "values", больше ничего. Data["usersession.country"], например, не имеет смысла, потому что нет словаря с этим ключом. Значения просто хранятся в списках. Вот все, что вам нужно сделать:

with open("q.csv", "w") as outfile:
    f = csv.writer(outfile)
    f.writerow(Data["columnNames"])
    f.writerows(Data["values"])
...