Я пытаюсь создать форму запроса json из файла csv. Эта форма запроса требуется веб-сервисом REST.
Пример входного файла:
Id,LineNo,Amt,ReceivedDt,FromDt,ToDate
123545,1,1000.00,2019-02-01T00:00:00,2019-02-01T00:00:00,2019-02-01T00:00:00
123545,2,200.00,2019-02-01T00:00:00,2019-02-01T00:00:00,2019-02-01T00:00:00
123546,1,200.00,2019-02-01T00:00:00,2019-02-01T00:00:00,2019-02-01T00:00:00
В файле, соответствующем приведенной выше структуре, есть другие записи. Один идентификатор может иметь несколько номеров строк, и все эти записи должны быть в одном наборе.
Желаемый формат:
{
"consumerData": {
"clientCode": "CLINIC",
"instance": "P",
"userId": ""
},
"gfsauthdata": [
{
"ToDate": "2019-02-01T00:00:00",
"ReceivedDt": "2019-02-01T00:00:00",
"Id": "123545",
"LineNo": "1",
"Amt": "1000.00",
"FromDt": "2019-02-01T00:00:00"
},
{
"ToDate": "2019-02-01T00:00:00",
"ReceivedDt": "2019-02-01T00:00:00",
"Id": "123545",
"LineNo": "2",
"Amt": "200.00",
"FromDt": "2019-02-01T00:00:00"
}
]
},
{
"consumerData": {
"clientCode": "CLINIC",
"instance": "P",
"userId": ""
},
"gfsauthdata":
{
"ToDate": "2019-02-01T00:00:00",
"ReceivedDt": "2019-02-01T00:00:00",
"Id": "123546",
"LineNo": "1",
"Amt": "200.00",
"FromDt": "2019-02-01T00:00:00"
}
}
Я не умею разделять записи разными наборами. Пожалуйста, предложите какой-нибудь способ отделить это. Я использую приведенный ниже код, который передает csv в json, но все записи поступают в одном наборе.
Код:
import json,csv
with open('Test.csv') as f:
inputfile = csv.DictReader(f)
output = []
for row in inputfile :
#j = json.dumps(row, indent=4)
output.append(row)
data = {
'consumerData': {
'clientCode': 'CLINIC',
'instance': 'P',
'userId': ''
},
'gfsauthdata': output
}
print(json.dumps(data, indent=4))






Вы неправильно думаете о своей структуре данных. Вы должны использовать такой диктант:
data[userid] = {
"type": "CLINIC",
"instance": "P",
"gfsauthdata": [
{
"ToDate": "2019-02-01T00:00:00",
"ReceivedDt": "2019-02-01T00:00:00",
"Id": "123545",
"LineNo": "1",
"Amt": "1000.00",
"FromDt": "2019-02-01T00:00:00"
},
{
"ToDate": "2019-02-01T00:00:00",
"ReceivedDt": "2019-02-01T00:00:00",
"Id": "123545",
"LineNo": "2",
"Amt": "200.00",
"FromDt": "2019-02-01T00:00:00"
}
]}
}