我试图以json格式得到答案,但它只返回一个字符串。我做错了什么?

时间:2017-11-18 11:32:17

标签: python json string

我试图以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)

这是Output ::

  

[{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'}]

2 个答案:

答案 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插件。非常感谢你的帮助。