使用json.dumps获取Python Flask以返回application/json

spi*_*nt0 11 json flask python-2.7

我正在使用Python Flask来创建服务器.我想发application/json回给客户(我的客户需要这个).当我使用json.dumps()时它会发回文本.

(如果我使用jsonify()而不是json.dumps(),请注意你的想法,我确实得到了application/json,但是这个函数似乎有些数据存在问题(如果我这里没有得到解决方案,我会进一步研究jsonify)).

服务器..............

import json
from flask import Flask, render_template, url_for, current_app, request, jsonify

app = Flask(__name__)

@app.route("/<arg1>")
def route1(arg1):
    dict1 = {"prop1": "p1", "prop2": "p2"}
    #return jsonify(dict1)      # this sends 'application/json'
    return json.dumps(dict1)  # this sends ' text/html; charset=utf-8'

app.run(host="0.0.0.0", port=8080, debug=True)
Run Code Online (Sandbox Code Playgroud)

测试客户端(实际客户端由客户提供)......

import pycurl
import cStringIO

SERVER_URL = "http://192.168.47.133:8080"  

buf = cStringIO.StringIO()
c = pycurl.Curl()

c.setopt(c.URL, SERVER_URL + '/index.html?city=perth')
c.setopt(c.HTTPHEADER, ['Accept:application/json']) 
c.setopt(c.WRITEFUNCTION, buf.write)
c.setopt(c.VERBOSE, True)

c.perform()
buf1 = buf.getvalue()
buf.close()

print(buf1)
Run Code Online (Sandbox Code Playgroud)

Meh*_*ghi 20

像这样改变它:

from flask import Response

@app.route("/<arg1>")
def route1(arg1):
    dict1 = {"prop1": "p1", "prop2": "p2"}
    return Response(json.dumps(dict1), mimetype='application/json')
Run Code Online (Sandbox Code Playgroud)


Nav*_*ava 8

我建议你使用jsonify内置的Flask.

from flask import jsonify
@app.route("/<arg1>")
def route1(arg1):
    return jsonify({'data':{"prop1": "p1", "prop2": "p2"}})
Run Code Online (Sandbox Code Playgroud)

使用javascript访问模板

if (typeof result['data'] !== "undefined"){
    alert(result["data"]);
}
Run Code Online (Sandbox Code Playgroud)

  • 这是否处理响应的 `mimetype='application/json'`? (2认同)