utf-8中的python jsonify字典

bek*_*eka 25 python json utf-8 flask

我想将json数据输入utf-8

我有一份清单 my_list = []

然后许多人将unicode值附加到列表中

my_list.append(u'????')

return jsonify(result=my_list)
Run Code Online (Sandbox Code Playgroud)

它得到了

{
"result": [
"\u10e2\u10d4\u10e1\u10e2",
"\u10e2\u10dd\u10db\u10d0\u10e8\u10d5\u10d8\u10da\u10d8"
]
}
Run Code Online (Sandbox Code Playgroud)

小智 47

使用以下配置添加UTF-8支持:

app.config['JSON_AS_ASCII'] = False
Run Code Online (Sandbox Code Playgroud)

  • 你救了我用 json.dumps() 改变我的 jsonify 函数。谢谢... (2认同)

Mar*_*ers 18

请改用标准库json模块,并ensure_ascii在编码时将关键字参数设置为False,或者对以下内容执行相同操作flask.json.dumps():

>>> data = u'\u10e2\u10d4\u10e1\u10e2'
>>> import json
>>> json.dumps(data)
'"\\u10e2\\u10d4\\u10e1\\u10e2"'
>>> json.dumps(data, ensure_ascii=False)
u'"\u10e2\u10d4\u10e1\u10e2"'
>>> print json.dumps(data, ensure_ascii=False)
"????"
>>> json.dumps(data, ensure_ascii=False).encode('utf8')
'"\xe1\x83\xa2\xe1\x83\x94\xe1\x83\xa1\xe1\x83\xa2"'
Run Code Online (Sandbox Code Playgroud)

请注意,您仍然需要将结果显式编码为UTF8,因为该dumps()函数unicode在该情况下返回一个对象.

您可以jsonify()通过在Flask应用配置中设置JSON_AS_ASCII为False 将其设置为默认值(并再次使用).

警告:不要在JSON中包含非ASCII安全的不受信任数据,然后插入到HTML模板中或在JSONP API中使用,因为这会导致语法错误或以这种方式打开跨站点脚本漏洞.这是因为JSON不是Javascript的严格子集,并且当禁用ASCII安全编码时,U + 2028和U + 2029分隔符将不会转义为\u2028\u2029序列.


小智 9

如果您仍然想使用flask 的json 并确保使用utf-8 编码,那么您可以执行以下操作:

from flask import json,Response
@app.route("/")
def hello():
    my_list = []
    my_list.append(u'????')
    data = { "result" : my_list}
    json_string = json.dumps(data,ensure_ascii = False)
    #creating a Response object to set the content type and the encoding
    response = Response(json_string,content_type="application/json; charset=utf-8" )
    return response
Run Code Online (Sandbox Code Playgroud)

#我希望这有帮助