Voici mon entrée de fichier json
{"userID": "679d3bad-155e-4b39-9ff7-7d564f408942", "Is salary credited before 5th": "Yes", "Avg Salary of last 3 months": 15453.33, "Avg Salary of last 6 months": 15290.5, "Avg Balance before salary of last 3 months": 113.15, "Avg Balance before salary of last 6 months": 105.22}
Code
with open('/Users/vrindabv/Documents/PycharmProjects/BankStatementEngine/test.json', "r") as f:
BankData = json.loads(f.read())
x = json.loads(json.dumps(BankData))
f = csv.writer(open("/Users/vrindabv/Documents/PycharmProjects/BankStatementEngine/test.csv", "w"))
f.writerow(["userID", "Is salary credited before 5th", "Avg Salary of last 3 months", "Avg Salary of last 6 months", "Avg Balance before salary of last 3 months", "Avg Balance before salary of last 6 months"])
for y in x:
f.writerow([x["userID"], x["Is salary credited before 5th"],
x["Avg Salary of last 3 months"],
x["Avg Salary of last 6 months"],
x["Avg Balance before salary of last 3 months"],
x["Avg Balance before salary of last 6 months"]])
Sortie
userID,Is salary credited before 5th,Avg Salary of last 3 months,Avg Salary of last 6 months,Avg Balance before salary of last 3 months,Avg Balance before salary of last 6 months
679d3bad-155e-4b39-9ff7-7d564f408942,Yes,15453.33,15290.5,113.15,105.22
679d3bad-155e-4b39-9ff7-7d564f408942,Yes,15453.33,15290.5,113.15,105.22
679d3bad-155e-4b39-9ff7-7d564f408942,Yes,15453.33,15290.5,113.15,105.22
679d3bad-155e-4b39-9ff7-7d564f408942,Yes,15453.33,15290.5,113.15,105.22
679d3bad-155e-4b39-9ff7-7d564f408942,Yes,15453.33,15290.5,113.15,105.22
679d3bad-155e-4b39-9ff7-7d564f408942,Yes,15453.33,15290.5,113.15,105.22
679d3bad-155e-4b39-9ff7-7d564f408942,Yes,15453.33,15290.5,113.15,105.22
Donc, ici, j'ai obtenu ma réponse, mais au lieu de l'imprimer une fois, il imprime 7 fois .. Comment puis-je résoudre ce problème.
BankData
est un dicton que vous n'avez pas besoin de répéter. Vous pouvez accéder directement aux valeurs à l'aide de la clé.
Ex:
import csv
import json
with open('/Users/vrindabv/Documents/PycharmProjects/BankStatementEngine/test.json') as infile:
BankData = json.loads(infile.read())
with open("/Users/vrindabv/Documents/PycharmProjects/BankStatementEngine/test.csv", "w") as outfile:
f = csv.writer(outfile)
f.writerow(["userID", "Is salary credited before 5th", "Avg Salary of last 3 months", "Avg Salary of last 6 months", "Avg Balance before salary of last 3 months", "Avg Balance before salary of last 6 months"])
f.writerow([BankData["userID"], BankData["Is salary credited before 5th"],
BankData["Avg Salary of last 3 months"],
BankData["Avg Salary of last 6 months"],
BankData["Avg Balance before salary of last 3 months"],
BankData["Avg Balance before salary of last 6 months"]])
Vous pouvez également utiliser pandas pour gérer la trame de données,
dct = {"userID": "679d3bad-155e-4b39-9ff7-7d564f408942", "Is salary credited before 5th": "Yes", "Avg Salary of last 3 months": 15453.33,
"Avg Salary of last 6 months": 15290.5, "Avg Balance before salary of last 3 months": 113.15, "Avg Balance before salary of last 6 months": 105.22}
import pandas as pd
df = pd.DataFrame.from_records(dct, index=[0])
df.to_csv('outputfile.csv')
Vous pouvez le faire: lire votre JSON et écrire un fichier CSV avec l'importation des modules json
et csv
import json, csv
from collections import OrderedDict #To maintain key value pair order
_json=json.loads(open('data.json', 'r').read(), object_pairs_hook=OrderedDict)
out=open('converted.csv', 'w')
writer = csv.writer(out) #create a csv.write
writer.writerow(_json[0].keys()) # header row
for row in _json:
writer.writerow(row.values())
La solution de GeekSambhu a fonctionné pour moi avec une modification mineure. Je l'ai un peu modifié car comme Vinsent, j'ai vu un KeyError. Les gens peuvent obtenir la KeyError si la structure JSON a un objet de niveau supérieur contenant le tableau des lignes de données (cela est considéré comme une meilleure pratique JSON). En supposant un objet de niveau supérieur appelé "données", vous ne modifieriez que deux lignes de code de la solution de GeekSambhu.
writer.writerow (_json ['data'] [0] .keys ()) # ligne d'en-tête
pour la ligne dans _json ['données']: