TypeError: Object of type 'bytes' is not JSON serializable

def ans_result(request):
   if request.method == "POST":
       redisKey = request.POST.get('ans_uuid')
       msg = DsRedis.OpsAnsibleModel.rpop(redisKey)
       if msg:
           print('---',msg)
           return JsonResponse({'msg': msg, "code": 200, 'data': []})
       else:
           return JsonResponse({'msg': None, "code": 200, 'data': []})

返回是報錯如下

TypeError: Object of type 'bytes' is not JSON serializable

查看message的值

 msg = DsRedis.OpsAnsibleModel.rpop(redisKey)
 
 msg取出的值變成了: b'[Done] Ansible Done.'
注: 帶有 b 開頭的字節(jié)

redis中key的值

6) "[Start] Ansible Model: ping  ARGS:"
127.0.0.1:6379[3]> LRANGE  8b3e134d-6ad7-4e21-b5d6-c7dfc1f101a8 0 -1
1) "[Done] Ansible Done."
2) "10.39.6.150 | SUCCESS >> {\n    \"ping\": \"pong\",\n    \"_ansible_parsed\": true,\n    \"_ansible_no_log\": false\n}"
3) "[Start] Ansible Model: ping  ARGS:"
4) "[Done] Ansible Done."
5) "10.39.6.150 | SUCCESS >> {\n    \"ping\": \"pong\",\n    \"_ansible_parsed\": true,\n    \"_ansible_no_log\": false\n}"
6) "[Start] Ansible Model: ping  ARGS:"

解決:

json模塊不支持bytes類型,要先將bytes轉(zhuǎn)換為str格式

即: 返回字符串加上 decode方法

def ans_result(request):
   if request.method == "POST":
       redisKey = request.POST.get('ans_uuid')
       msg = DsRedis.OpsAnsibleModel.rpop(redisKey)
       if msg:
           return JsonResponse({'msg': msg.decode(), "code": 200, 'data': []})

注: python3 和python2 之間對字符的編碼有很大變化 ,這回導(dǎo)致python2 寫的代碼在python3里寫的代碼可能會有異常

python2 和python3 字符編碼的差別

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容