首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python3.6 JsonResponse问题

Python3.6 JsonResponse问题
EN

Stack Overflow用户
提问于 2017-10-31 19:14:19
回答 1查看 1.3K关注 0票数 3

因此,我最近迁移到Python3.6和Django 1.11,我的JsonResponse代码如下所示:

代码语言:javascript
复制
   return JsonResponse({'status': '1'}) 

它运行得很好,但是在迁移之后,我开始得到这个错误:

TypeError:类型为“字节”的对象不能被JSON序列化

在打印传递给JsonResponse的数据类型后,我实现了python3.6,将其从dict更改为字节。所以我修改了代码,以确保我传递的是一个白痴。

在尝试了所有这些之后,我仍然会遇到相同的错误:

代码语言:javascript
复制
    data = dict([('status', 0)])
    print(data)
    print(type(data))
    # print(type(json.dumps(data)))
    # data = {"status": '0'}
    # data = json.dumps(data)
    # json.dumps(data.decode("utf-8"))
    #response = json.JSONEncoder().encode({"status": 0}) 
    #JsonResponse(data, safe=False)
    # response = json.dumps(data)
    print(JsonResponse(data, safe=False))
    return JsonResponse(data, safe=False)

指纹:

代码语言:javascript
复制
    {'status': 0}
    <class 'dict'>
    <JsonResponse status_code=200, "application/json">

使用json.dumps选项,可以得到此错误

AttributeError:'str‘对象没有属性'get’

任何帮助都将不胜感激。

回溯

代码语言:javascript
复制
    Traceback (most recent call last):
    File "/Users/andresvillavicencio/bancompara.mx/lib/python3.6/site-packages/django/core/handlers/base.py", line 131, in get_response
    response = middleware_method(request, response)
    File "/Users/andresvillavicencio/bancompara.mx/lib/python3.6/site-packages/django/contrib/sessions/middleware.py", line 58, in process_response
request.session.save()
    File "/Users/andresvillavicencio/bancompara.mx/lib/python3.6/site-packages/django/contrib/sessions/backends/db.py", line 81, in save
return self.create()
    File "/Users/andresvillavicencio/bancompara.mx/lib/python3.6/site-packages/django/contrib/sessions/backends/db.py", line 54, in create
self.save(must_create=True)
    File "/Users/andresvillavicencio/bancompara.mx/lib/python3.6/site-packages/django/contrib/sessions/backends/db.py", line 83, in save
obj = self.create_model_instance(data)
    File "/Users/andresvillavicencio/bancompara.mx/lib/python3.6/site-packages/django/contrib/sessions/backends/db.py", line 69, in create_model_instance
session_data=self.encode(data),
    File "/Users/andresvillavicencio/bancompara.mx/lib/python3.6/site-packages/django/contrib/sessions/backends/base.py", line 98, in encode
serialized = self.serializer().dumps(session_dict)
    File "/Users/andresvillavicencio/bancompara.mx/lib/python3.6/site-packages/django/core/signing.py", line 93, in dumps
return json.dumps(obj, separators=(',', ':')).encode('latin-1')
    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/__init__.py", line 238, in dumps
**kw).encode(obj)
    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/encoder.py", line 257, in iterencode
return _iterencode(o, 0)
    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/encoder.py", line 180, in default
o.__class__.__name__)
   TypeError: Object of type 'bytes' is not JSON serializable
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-01 08:31:32

问题不在于return JsonResponse({'status': '1'})

回溯显示,当Django试图保存Django会话时会发生错误。

在视图中,您一定在做这样的事情:

代码语言:javascript
复制
request.session['my_key'] = b'bytes'

对于该示例,您必须解码字节对象(或者使用字符串):

代码语言:javascript
复制
request.session['my_key'] = b'bytes'.decode('utf-8')
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47042998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档