#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.