python jsonify dictionary in utf-8 python jsonify dictionary in utf-8 flask flask

python jsonify dictionary in utf-8


Use the following config to add UTF-8 support:

app.config['JSON_AS_ASCII'] = False


Use the standard-library json module instead, and set the ensure_ascii keyword parameter to False when encoding, or do the same with 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"'

Note that you still need to explicitly encode the result to UTF8 because the dumps() function returns a unicode object in that case.

You can make this the default (and use jsonify() again) by setting JSON_AS_ASCII to False in your Flask app config.

WARNING: do not include untrusted data in JSON that is not ASCII-safe, and then interpolate into a HTML template or use in a JSONP API, as you can cause syntax errors or open a cross-site scripting vulnerability this way. That's because JSON is not a strict subset of Javascript, and when disabling ASCII-safe encoding the U+2028 and U+2029 separators will not be escaped to \u2028 and \u2029 sequences.


If you still want to user flask's json and ensure the utf-8 encoding then you can do something like this:

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

#I hope this helps