我试图得到json格式的答案,但它只是返回一个弦。什么我做错了吗?

2024-05-28 18:45:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图得到json格式的答案,但它只是返回一个弦。什么我做错了吗?你知道吗

from flask import Flask, request, Response
import mysql.connector
import json

app = Flask(__name__)

def createConnection():
    connection = mysql.connector.connect(user="akshay", password="akshay", host="localhost", database="BOOKS")
    return connection

@app.route("/contact")
def getContacts():
    print(request)
connection = createConnection()
cursor = connection.cursor()

cursor.execute("SELECT ID, NAME, AUTHOR, SUBJECT, PRICE FROM BOOKS;")

contacts = []
for (ID, NAME, AUTHOR, SUBJECT, PRICE) in cursor:
    contacts.append({
        'ID': ID,
        'NAME': NAME,
        "AUTHOR": AUTHOR, 
        "SUBJECT": SUBJECT,
        "PRICE": PRICE
    })

cursor.close()
connection.close()
response = Response()
response.content_type ='application/json'
response.data = json.loads(json.dumps(contacts))
return response

app.run('0.0.0.0', 4000)

这是输出:

[{u'PRICE': 9999.999, u'AUTHOR': u'AKSHAY', u'NAME': u'AKSHAY', u'ID': 4, u'SUBJECT': u'BIG_DATA'}, {u'PRICE': 123.456, u'AUTHOR': u'Yashwant Kanetkar', u'NAME': u'Exploring C', u'ID': 1001, u'SUBJECT': u'C Programming'}, {u'PRICE': 371.019, u'AUTHOR': u'Yashwant Kanetkar', u'NAME': u'Pointers in C', u'ID': 1002, u'SUBJECT': u'C Programming'}, {u'PRICE': 334.215, u'AUTHOR': u'E Balaguruswami', u'NAME': u'ANSI C Programming', u'ID': 1003, u'SUBJECT': u'C Programming'}, {u'PRICE': 140.121, u'AUTHOR': u'Dennis Ritchie', u'NAME': u'ANSI C Programming', u'ID': 1004, u'SUBJECT': u'C Programming'}, {u'PRICE': 417.764, u'AUTHOR': u'Herbert Schildt', u'NAME': u'C++ Complete Reference', u'ID': 2001, u'SUBJECT': u'C++ Programming'}, {u'PRICE': 620.665, u'AUTHOR': u'Stanley Lippman', u'NAME': u'C++ Primer', u'ID': 2002, u'SUBJECT': u'C++ Programming'}, {u'PRICE': 987.213, u'AUTHOR': u'Bjarne Stroustrup', u'NAME': u'C++ Programming Language', u'ID': 2003, u'SUBJECT': u'C++ Programming'}, {u'PRICE': 525.121, u'AUTHOR': u'Herbert Schildt', u'NAME': u'Java Complete Reference', u'ID': 3001, u'SUBJECT': u'Java Programming'}, {u'PRICE': 575.651, u'AUTHOR': u'Cay Horstmann', u'NAME': u'Core Java Volume I', u'ID': 3002, u'SUBJECT': u'Java Programming'}, {u'PRICE': 458.238, u'AUTHOR': u'James Gosling', u'NAME': u'Java Programming Language', u'ID': 3003, u'SUBJECT': u'Java Programming'}, {u'PRICE': 567.391, u'AUTHOR': u'Peter Galvin', u'NAME': u'Operatig System Concepts', u'ID': 4001, u'SUBJECT': u'Operating Systems'}, {u'PRICE': 421.938, u'AUTHOR': u'Mauris J Bach', u'NAME': u'Design of UNIX Operating System', u'ID': 4002, u'SUBJECT': u'Operating Systems'}, {u'PRICE': 352.822, u'AUTHOR': u'Uresh Vahalia', u'NAME': u'UNIX Internals', u'ID': 4003, u'SUBJECT': u'Operating Systems'}, {u'PRICE': 872.652, u'AUTHOR': u'Ayn Rand', u'NAME': u'Atlas Shrugged', u'ID': 8001, u'SUBJECT': u'Novell'}, {u'PRICE': 9999.999, u'AUTHOR': u'AKSHAY', u'NAME': u'AKSHAY', u'ID': 9001, u'SUBJECT': u'BIG_DATA'}]


Tags: nameimportidjsonappresponseoperatingjava
2条回答

您的代码没有什么特别的错误,只要删除对json.loads()的调用,这样JSON编码的数据就可以用作响应数据。你知道吗

调用json.loads()将重新创建一个Python数据结构(本例中为字典列表)并将其传递给响应,该响应不会序列化为有效的JSON。在python2中,它将使用由str()生成的Python repr()格式进行序列化,该格式并不总是生成与JSON兼容的字符串(例如u''字符串前缀不是有效的JSON)。在python3中,is可能会导致异常,因为它无法转换为bytes对象。你知道吗

您可以通过使用^{}来改进代码,它将返回一个Response对象,该对象具有正确的内容类型头和JSON主体:

from flask.json import jsonify

@app.route("/contact")
def getContacts():
    # create contacts...
    return jsonify(contacts)

好了,终于得到了正确的输出:

/ 20171119101107
// http://localhost:4000/contact

[
  {
    "SUBJECT": "BIG_DATA",
    "PRICE": 9999.999,
    "AUTHOR": "AKSHAY",
    "ID": 4,
    "NAME": "AKSHAY"
  },
  {
    "SUBJECT": "C Programming",
    "PRICE": 123.456,
    "AUTHOR": "Yashwant Kanetkar",
    "ID": 1001,
    "NAME": "Exploring C"
  },
  {
    "SUBJECT": "C Programming",
    "PRICE": 371.019,
    "AUTHOR": "Yashwant Kanetkar",
    "ID": 1002,
    "NAME": "Pointers in C"
  },

我搬走了json.loads文件()并安装了json查看器插件。谢谢非常感谢你的帮助。你知道吗

相关问题 更多 >

    热门问题