Как преобразовать мой кортеж в формат, чтобы он был приемлем для формата JSON в Python - PullRequest
0 голосов
/ 23 апреля 2020

В настоящее время у меня есть этот метод в python код:

@app.route('/getData', methods = ['GET'])
def get_Data():

    c.execute("SELECT abstract,category,date,url  from Data")
    data = c.fetchall()   
    resp = jsonify(data)
    resp.status_code = 200
    return resp

Вывод, который я получаю из этого:

[
  [
    "2020-04-23 15:32:13",
    "Space",
    "https://www.bisnow.com/new-jersey",
    "temp"
  ],
  [
    "2020-04-23 15:32:13",
    "Space",
    "https://www.bisnow.com/events/new-york",
    "temp"
  ]
]

Однако я хочу, чтобы вывод выглядел следующим образом :

[
   {
    "abstract": "test", 
    "category": "journal", 
    "date": "12-02-2020", 
    "link": "www.google.com"
   },
   {
    "abstract": "test", 
    "category": "journal", 
    "date": "12-02-2020", 
    "link": "www.google.com"
   }
]

Как преобразовать вывод в ожидаемый формат?

1 Ответ

0 голосов
/ 23 апреля 2020

Как указывает @jonrsharpe, вы просто не можете ожидать, что кортеж, поступающий из этого запроса к базе данных, превратится в словарь в выводе JSON. Ваша data переменная не содержит информацию, необходимую для построения желаемого вами ответа.

Это будет зависеть от вашей базы данных, но я бы порекомендовал найти способ извлечения диктов из вашего запрос к базе данных вместо кортежей, в этом случае остальная часть вашего кода должна работать как есть. Например, для sqlite вы можете определить свой курсор c следующим образом:

import sqlite3
connection = sqlite3.connect('dbname.db') # database connection details here...
connection.row_factory = sqlite3.Row
c = connection.cursor()

Теперь, если ваша база данных по какой-то причине не может поддерживать курсор словаря, вам нужно свернуть свой собственный словарь после получения результаты запроса к базе данных. Например, что-то вроде этого:

fieldnames = ('abstract', 'category', 'date', 'link')
numfields = len(fieldnames)
data = []
for row in c.fetchall():
    for idx in range(0, numfields - 1):
        dictrow[fields[idx]] = row[idx]
    data.append(dictrow)

Я перебираю список меток полей, которые не обязательно должны соответствовать столбцам вашей базы данных, но do должны быть в том же порядке. и создание dict путем сопряжения метки с датумом из кортежа БД в той же позиции. Этот отрывок заменит одну строку data = c.fetchall() в OP.

...