изменение порядка вывода JSON с использованием python

#python #json #python-3.x

#python #json #python-3.x

Вопрос:

У меня есть мой код на Python, который извлекает данные из инструкции SQL select и выводит в формате JSON.

 try:        
    cur.execute("My SQL Statement is here")
    con.commit()
    for results in cur.fetchall():
        temp = recordsConv(results)
        records_list.append(temp)

    invoice_records = {'invoiceDetails':records_list}
    y = json.dumps(invoice_records)
    payload = json.loads(y)
    return(payload)
        
    else:
        return(strg)

except error as e:
    raise error({"Error": True,"message":str(e)})

def recordsConv(y):
    try:
        record = {}
        record["File Number"] = y[0]
        record["House Bill Number"] = y[1]
        record["Handling Station"] = y[2]
        record["Charge Code Desc"] = y[3]
        record["Total"] = y[4]
  

Выполнение работает нормально, и это пример вывода

 {
    "invoiceDetails": [
        {
            "File Number": "11111",
            "House Bill Number": "22222",
            "Handling Station": "ABC",
            "Charge Code Desc": "DUTY AND TAX",
            "Total": 251.1
        },
        {
            "File Number": "11111",
            "House Bill Number": "22222",
            "Handling Station": "ABC",
            "Charge Code Desc": "CARTAGE",
            "Total": 120.0
        }
    ]
}
  

Как вы можете видеть на выходе, мои данные дублируются. Я пытаюсь добиться следующего результата:

 {
    "invoiceDetails": [
        {
            "File Number": "11111",
            "House Bill Number": "22222",
            "Handling Station": "ABC",             
            "Charge Code Desc" : [
                {
                    "DUTY AND TAX" : 251.1,
                    "CARTAGE" : 120.0
                    }
     ]  
   }
   ]
}
  

Моя попытка: я сохранил добавляемую часть из цикла for следующим образом

 for results in cur.fetchall():
        temp = recordsConv(results)
records_list.append(temp)
  

остальная часть кода такая же, но мой вывод не соответствует ожиданиям

вывод:

 {
    "invoiceDetails": [
        {
            "File Number": "11111",
            "House Bill Number": "22222",
            "Handling Station": "ABC",
            "Charge Code Desc": "CARTAGE",
            "Total": 120.0
        }
    ]
}
  

Комментарии:

1. Я настоятельно рекомендую использовать Pandas для таких манипуляций с данными. Это сэкономит вам много времени в долгосрочной перспективе. В этом случае вы бы просто использовали операцию groupby.

2. В зависимости от СУБД, вам может потребоваться настроить SQL для возврата json.