Python Flask jsonify返回字节和字符串,而不是json对象

Python Flask jsonify返回字节和字符串,而不是json对象,python,json,api,flask,jsonify,Python,Json,Api,Flask,Jsonify,在Postman post_new_cafe中,json是按设想打印的,但当我想在控制台和网页中打印json时,打印方式就不同了。见下面的例子 @app.route('/add_form', methods=['GET', 'POST']) def add_new_cafe_form(): form = CafeForm() if form.validate_on_submit(): response = post_new_cafe() print

在Postman post_new_cafe中,json是按设想打印的,但当我想在控制台和网页中打印json时,打印方式就不同了。见下面的例子

@app.route('/add_form', methods=['GET', 'POST'])
def add_new_cafe_form():
    form = CafeForm()
    if form.validate_on_submit():
        response = post_new_cafe()
        print(response)
    return render_template("add.html", form=form)
这是打印出来的

打印出来

[b'{\n“成功”:“成功添加了新咖啡馆。”\n}\n']

还有这个

@app.route('/add_form', methods=['GET', 'POST'])
def add_new_cafe_form():
    form = CafeForm()
    if form.validate_on_submit():
        response = post_new_cafe()
        print(response.json())
    return render_template("add.html", form=form)
出错

TypeError:“dict”对象不可调用

这是返回jsonify的函数

# # HTTP POST - Create Record
@app.route('/add', methods=['POST'])
def post_new_cafe():
    new_cafe = Cafe(
        name=request.form.get('name'),
        map_url=request.form.get('map_url'),
        img_url=request.form.get('img_url'),
        location=request.form.get('location'),
        seats=request.form.get('seats'),
        has_toilet=bool(strtobool(request.form.get('has_toilet'))),
        has_wifi=bool(strtobool(request.form.get('has_wifi'))),
        has_sockets=bool(strtobool(request.form.get('has_sockets'))),
        can_take_calls=bool(strtobool(request.form.get('can_take_calls'))),
        coffee_price=request.form.get('coffee_price')
    )
    # db.session.add(new_cafe)
    # db.session.commit()
    return jsonify(success="Successfully added the new cafe.")
我试过这个

resp = Response(response={"success":"Successfully added the new cafe."},
                status=200,
                mimetype="application/json")
return jsonify(resp)
它不起作用了,我也尝试过使用make_response,但仍然无效

我想要的是,当我将post\u new\u cafe()存储到响应变量中时,就有了这个

response = post_new_cafe()
data = response.json()
print(data)
{“成功”:“成功添加了新咖啡馆。”}


已成功添加新咖啡馆。

嘿,您可以使用json库解决此问题

例如:

import json

def post_new_cafe():
    new_cafe = Cafe(
        name=request.form.get('name'),
        map_url=request.form.get('map_url'),
        img_url=request.form.get('img_url'),
        location=request.form.get('location'),
        seats=request.form.get('seats'),
        has_toilet=bool(strtobool(request.form.get('has_toilet'))),
        has_wifi=bool(strtobool(request.form.get('has_wifi'))),
        has_sockets=bool(strtobool(request.form.get('has_sockets'))),
        can_take_calls=bool(strtobool(request.form.get('can_take_calls'))),
        coffee_price=request.form.get('coffee_price')
    )
    return json.dumps({"success": "Succesfully added the new cafe."})

response = post_new_cafe()
data = json.loads(response)
print(data)
print(data["success"])
有关更多信息,请参阅

如果您需要序列化numpy数组,则在

关于你的其他问题:

@app.route('/add_form', methods=['GET', 'POST'])
def add_new_cafe_form():
    form = CafeForm()
    if form.validate_on_submit():
        response = post_new_cafe()
        print(response.json())
    return render_template("add.html", form=form)
您需要首先将响应从二进制转换为字符串:
response.decode('utf-8')
,然后将其解析为JSON:
JSON.loads(response.decode('utf-8'))

使用JSON和dumps()然后loads()解决了我的问题,但现在我必须更改所有返回jsonify的返回,我想这就是我今晚要做的事情,哈哈。非常感谢你的帮助。
import json

def post_new_cafe():
    new_cafe = Cafe(
        name=request.form.get('name'),
        map_url=request.form.get('map_url'),
        img_url=request.form.get('img_url'),
        location=request.form.get('location'),
        seats=request.form.get('seats'),
        has_toilet=bool(strtobool(request.form.get('has_toilet'))),
        has_wifi=bool(strtobool(request.form.get('has_wifi'))),
        has_sockets=bool(strtobool(request.form.get('has_sockets'))),
        can_take_calls=bool(strtobool(request.form.get('can_take_calls'))),
        coffee_price=request.form.get('coffee_price')
    )
    return json.dumps({"success": "Succesfully added the new cafe."})

response = post_new_cafe()
data = json.loads(response)
print(data)
print(data["success"])
@app.route('/add_form', methods=['GET', 'POST'])
def add_new_cafe_form():
    form = CafeForm()
    if form.validate_on_submit():
        response = post_new_cafe()
        print(response.json())
    return render_template("add.html", form=form)