日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于Django中JsonResponse返回中文字典编码错误的解决方案

發布時間:2024/7/5 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于Django中JsonResponse返回中文字典编码错误的解决方案 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

遇到這樣一個問題,返回的json不是中文

def get_json(request):return JsonResponse({"res": "成功"})

結果:

{"res": "\u6210\u529f"}

解決方案:JsonResponse(data, json_dumps_params={'ensure_ascii':False})

! data是需要渲染的字典

def get_json(request):return JsonResponse({"res": "成功"},json_dumps_params={'ensure_ascii': False}) {"res": "成功"}

原因分析:

首先我們看JsonResponse()的源碼:

class?JsonResponse(HttpResponse): def?__init__(self, data, encoder=DjangoJSONEncoder, safe=True,json_dumps_params=None,?**kwargs):if?safe?and?not?isinstance(data,?dict):raise?TypeError('In order to allow non-dict objects to be serialized set the ''safe parameter to False.')if?json_dumps_params?is?None:json_dumps_params?=?{}kwargs.setdefault('content_type',?'application/json')data?=?json.dumps(data,?cls=encoder,?**json_dumps_params)super(JsonResponse,?self).__init__(content=data,?**kwargs)

JsonResponse()在初始化的時候使用了json.dumps()把字典轉換成了json格式,具體方法如下: 這里我們從根源開始找它編碼錯誤的原因:

data?=?json.dumps(data,?cls=encoder,?**json_dumps_params)

接下來我們看看json.dumps()的源碼:

def?dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,allow_nan=True,?cls=None, indent=None, separators=None,default=None, sort_keys=False,?**kw):if?(not?skipkeys?and?ensure_ascii?andcheck_circular?and?allow_nan?andcls?is?None?and?indent?is?None?and?separators?is?None?anddefault?is?None?and?not?sort_keys?and?not?kw):return?_default_encoder.encode(obj)if?cls?is?None:cls?=?JSONEncoderreturn?cls(skipkeys=skipkeys, ensure_ascii=ensure_ascii,check_circular=check_circular, allow_nan=allow_nan,????????indent=indent,separators=separators, default=default,sort_keys=sort_keys,**kw).encode(obj)? ?

?

?源碼注釋原文:

If ``ensure_ascii`` is false, then the return value can contain non-ASCII characters if they appear in strings contained in ``obj``. Otherwise, all such characters are escaped in JSON strings.

?也就是說ensure_ascii是false的時候,可以返回非ASCII碼的值,否則就會被JSON轉義。

所以含有中文的字典轉json字符串時,使用?json.dumps() 方法要把ensure_ascii參數改成false,即?json.dumps(dict,ensure_ascii=False)。

JsonResponse()接收參數有關鍵詞參數,json_dumps_params=None?,用來給?json.dumps() 傳參,所以 要在關鍵字參數后面拼個字典來傳另一組關鍵字參數?ensure_ascii=False,即:

json_dumps_params={'ensure_ascii':False}

綜上可解決使用?JsonResponse()?強制把含有中文的字典轉json并返回響應,前端渲染編碼錯誤的問題。

總結

以上是生活随笔為你收集整理的关于Django中JsonResponse返回中文字典编码错误的解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。