【问题标题】:How do I convert my tuple into the format so that it is acceptable for the JSON format in Python如何将我的元组转换为格式,以便 Python 中的 JSON 格式可以接受
【发布时间】:2020-08-07 00:28:19
【问题描述】:

我目前在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"
   }
]

如何将我的输出转换为预期的格式?

【问题讨论】:

  • 使用字典

标签: python angular flask-restful


【解决方案1】:

正如@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 必须按相同的顺序,并通过将标签与来自的数据配对来创建字典db 元组在同一位置。此段落将替换 OP 中的单行 data = c.fetchall()

【讨论】:

  • 您好,感谢您的帮助。我正在使用 SQLite 数据库。这就是我建立连接的方式 conn = None c = None conn = sqlite3.connect('crawler.db',check_same_thread=False) c = conn.cursor() 我正在从烧瓶中导入 jasonify库将其转换为 JSON 对象
  • @KamranArshad 在这种情况下,请尝试在您的初始 conn = ... 行之后添加行 conn.row_factory = sqlite3.Row。那应该给你 dict 行而不是元组。我会更新我的答案。
  • @KamranArshad 很高兴听到它!如果它对您有用,您介意接受答案吗?谢谢!
猜你喜欢
  • 2020-09-29
  • 1970-01-01
  • 2017-03-24
  • 2021-09-27
  • 2020-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多