Наборы для преобразования CSV в JSON принадлежат одному ключу

Я пытаюсь создать форму запроса 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))
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
18
1

Ответы 1

Вы неправильно думаете о своей структуре данных. Вы должны использовать такой диктант:

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"
        }
    ]}
}

Другие вопросы по теме