Voici mon entrée de fichier json
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
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 strong >
{"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}
Donc, ici, j'ai eu ma réponse mais au lieu de l'imprimer une fois, elle est imprimée 7 fois .. Comment résoudre ce problème.
p>
4 Réponses :
BankData est un dict dont vous n'avez pas besoin pour l'itérer. Vous pouvez accéder directement aux valeurs à l'aide de la clé.
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"]])
La bibliothèque json peut également lire les objets fichier, sans obtenir la représentation sous forme de chaîne au préalable: json.load (infile)
Vous pouvez également utiliser des pandas pour gérer le dataframe,
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 faire ceci: Lisez votre JSON et écrivez 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())
Votre code générera la sortie au CSV avec la syntaxe dans les valeurs JSON.
Oui @BhaskarDas, il générera JSON pour le csv fourni
writer.writerow (_json [0] .keys ()) # ligne d'en-tête KeyError: 0 obtenant l'erreur ci-dessus
La solution de GeekSambhu a fonctionné pour moi avec une modification mineure. Je l'ai un peu modifié car comme Vinsent, j'ai vu une KeyError . Les gens peuvent obtenir le 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 premier niveau appelé 'data', vous ne changeriez 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 ['data']:
Pourquoi fais-tu cela?
x = json.loads (json.dumps (BankData))? Dans tous les cas,xest un objetdict. Vous itérez dessus,pour y dans x:qui itérera sur ses clés . Mais vous n'utilisez même jamaisy, et écrivez simplement la même ligne 7 fois (le nombre de clés).@Chris: Que me proposez-vous de faire?