У меня есть требование преобразовать файл данных CSV во вложенный JSON в Python для приложения. Мой ниже текущий код Python работает нормально для 1 документа Customer / Accounts, но каким-то образом не может создать дамп json для всех клиентов в файле CSV.
Я предоставляю код Python ниже, который даст вам некоторое представление о том, чего я пытаюсь достичь. Пожалуйста, дайте мне знать, если есть какие-либо существующие резолюции по этому вопросу.
Пример кода Python:
import pandas as pd
from itertools import groupby
from collections import OrderedDict
import json
df = pd.read_csv('cust.csv', dtype={
"ClientID" : str,
"ClientName" : str,
"AcctID" : str,
"AcctNbr" : str,
"AcctTyp" : str
})
results = []
for (ClientID, ClientName), bag in df.groupby(["ClientID", "ClientName"]):
contents_df = bag.drop(["ClientID", "ClientName"], axis=1)
subset = [OrderedDict(row) for i,row in contents_df.iterrows()]
results.append(OrderedDict([("ClientID", ClientID),("ClientName", ClientName),("subset", subset)]))
print json.dumps(results[0], indent=4)
with open('ExpectedJsonFile.json', 'w') as outfile:
outfile.write(json.dumps(results[0], indent=4))
Образец INPUT CSV:
ClientID,ClientName,AcctID,AcctNbr,AcctTyp
----------------------------------------------------------
00001,John George,812001,812001095,DDA
00001,John George,813002,813002096,SAV
00001,John George,814003,814003097,AFS
00024,Richard Polado,512987,512987085,ML
00024,Richard Polado,512983,512983086,IL
00345,John Cruze,1230,123001567,SAV
00345,John Cruze,5145,514502096,CD
00345,John Cruze,7890,7890033527,SGD
Желаемый вывод JSON:
{
"clientId":00001,
"ClientName":"John George",
"subset":[
{
"AcctID":812001,
"AcctNbr":"812001095",
"AcctTyp":"DDA",
},
{
"AcctID":813002,
"AcctNbr":"813002096",
"AcctTyp":"SAV",
},
{
"AcctID":814003,
"AcctNbr":"814003097",
"AcctTyp":"AFS",
}
]
},
{
"clientId":00024,
"ClientName":"Richard Polado",
"subset":[
{
"AcctID":512987,
"AcctNbr":"512987085",
"AcctTyp":"ML",
},
{
"AcctID":512983,
"AcctNbr":"512983086",
"AcctTyp":"IL",
}
]
}
и эти документы следует продолжить создавать для других тысяч клиентов.