Reputation: 428
Following is my json file input
{"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"]])
Output
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
So, here I did got my answer but instead of printing it once, It is printing 7 times.. How do I fix this.
Upvotes: 4
Views: 25091
Reputation: 1
GeekSambhu's solution worked for me with a minor modification. I modified it a little because like Vinsent, I saw a KeyError. People may be getting the KeyError if the JSON structure has a top level object holding the array of the rows of data (this is considered a JSON best practice). Assuming a top level object called 'data', you would change only two lines of code of GeekSambhu's solution.
writer.writerow(_json['data'][0].keys()) # header row
for row in _json['data']:
Upvotes: 0
Reputation: 2841
You can do this: Read your JSON and write-in a CSV file with importing json
and csv
modules
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())
Upvotes: 0
Reputation: 2255
You can also use pandas to handle 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')
Upvotes: 5
Reputation: 82785
BankData
is a dict you do not need to iterate it. You can directly access the values using the key.
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"]])
Upvotes: 0