我试图以json格式获得答案,但它只返回一个String。我做错了什么?
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,你' AUTHOR':你' AKSHAY',你' NAME':你' AKSHAY' ;,' ID': 4,你'主题':你' BIG_DATA'},{u' PRICE':123.456,你' AUTHOR':你' Yashwant Kanetkar',你' NAME':你正在探索C',你' ID':1001,你'主题':你' C 编程'},{u' PRICE':371.019,你' AUTHOR':你' Yashwant Kanetkar', 你的名字':你在C'指针,' ID':1002,你'主题':你' C编程'} , {u' PRICE':334.215,你' AUTHOR':你' E Balaguruswami',你' NAME':你' ANSI C 编程',你' ID':1003,你'主题':你' C编程'},{u' PRICE': 140.121,你' AUTHOR':你' Dennis Ritchie',你' NAME':你' ANSI C编程',' ID': 1004,你'主题':你编程'},{u' PRICE':417.764, 你的作者':你的赫伯特希尔特',你'姓名':你的C ++完全参考', 你' ID':2001,你'主题':你' C ++编程'},{u' PRICE':620.665, 你和作者:#Stanley Lippman',你' NAME':你' C ++ Primer',' ID':2002, 你'主题':你的C ++编程'},{u' PRICE':987.213,你' AUTHOR': 你是Bjarne Stroustrup',你' NAME':你的C ++编程语言',你' ID': 2003年,你'主题为:' C ++编程'},{u' PRICE':525.121,你' AUTHOR': 你的赫伯特希尔特',你的名字':你的Java完整参考',你' ID':3001, 你'主题'你是Java编程'},{u' PRICE':575.651,你' AUTHOR':你' Cay Horstmann',你' NAME':你的核心Java卷I',你' ID':3002,你'主题': 你是Java编程'},{u' PRICE':458.238,你' AUTHOR':你' James Gosling', 你的名字':你的Java编程语言',你' ID':3003,你'主题':你' Java 编程'},{u' PRICE':567.391,你' AUTHOR':你' Peter Galvin', 你的名字':你的操作系统概念',你' ID':4001,你'主题': 你的操作系统'},{u' PRICE':421.938,你' AUTHOR':你' Mauris J Bach',u' NAME':u' UNIX操作系统设计',你' ID':4002, 你的主题是'操作系统'},{u' PRICE':352.822,你' AUTHOR': u' Uresh Vahalia',你' NAME':你的内部',你' ID':4003,你'主题': 你的操作系统'},{u' PRICE':872.652,你' AUTHOR':你' Ayn Rand', 你的名字':你好,阿特拉斯耸了耸肩,你的身份证号码:8001,你'主题是':你好'Novell'}, {u' PRICE':9999.999,你' AUTHOR':你' AKSHAY',你' NAME':你' AKSHAY',你&# 39; ID&#39 ;: 9001,你'主题':你' BIG_DATA'}]
答案 0 :(得分:2)
您的代码没有什么特别的错误,只需删除对json.loads()
的调用,以便将JSON编码数据用作响应数据。
调用json.loads()
将重新创建并将Python数据结构(在本例中为字典列表)传递给响应,该响应不会序列化为有效的JSON。在Python 2中,它将使用由repr()
生成的Python str()
格式进行序列化,该格式不会始终生成与JSON兼容的字符串(例如,u''
字符串前缀不是有效的JSON)。在Python 3中可能会导致异常,因为它无法转换为字节对象。
您可以使用flask.json.jsonify()
来改进代码,JS Bin将返回具有正确内容类型标头和JSON正文的Response
对象:
from flask.json import jsonify
@app.route("/contact")
def getContacts():
# create contacts...
return jsonify(contacts)
答案 1 :(得分:0)
好的,终于得到了正确的输出::
/ 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 viewer插件。非常感谢你的帮助。