使用Flask的jsonify()
无法实现,但是可以使用普通的json.dumps()
。唯一需要注意的是,由于响应头中设置了内容长度,因此必须使内容长度匹配:
import json
from collections import OrderedDict
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/unordered")
def unordered_dict():
d = OrderedDict([('e',1),('d',2),('c',3),('b',4),('a',5)])
output = jsonify(d)
return output
@app.route("/ordered")
def ordered_dict():
d = OrderedDict([('e',1),('d',2),('c',3),('b',4),('a',5)])
response = json.dumps(d)
placeholder = '_'*(len(response)-2)
output = jsonify(placeholder)
output.response[0] = response + '\n'
return output
第一个默认按字母顺序返回,或者如果
app.config['JSON_SORT_KEYS'] = False
则返回随机顺序。第二个应该按指定的顺序返回键。
注意:正如其他人所指出的那样,JSON规范不要求顺序。然而,大多数浏览器似乎仍然尊重顺序,因此在需要但不是必要的情况下可以使用它。如果顺序很重要,则您唯一的选择是在转换为JSON之前将其转换为列表。
(注:在
https://github.com/pallets/flask/issues/1877之前,
Content-Length
没有明确设置,因此它要简单得多!)