【问题标题】:Python: str(bytes object) in jsonify causes TypeError: Object of type 'bytes' is not JSON serializablePython:jsonify 中的 str(bytes object) 导致 TypeError:“bytes”类型的对象不是 JSON 可序列化的
【发布时间】:2018-12-31 01:55:58
【问题描述】:

我向我的 API 发送了一个请求,但它抛出 TypeError: Object of type 'bytes' is not JSON serializable。它还返回 500 INTERNAL SERVER ERROR。

代码:

def login():
    data = request.json
    if(data['token'] != 'xxxxxxxxxxx'):
        return jsonify(), 401
    user = User.objects(npm=data['npm']).first()
    if(user == None):
        del data['token']
        user = User(**data)
        user.major = Major.objects(name=data['major']).first()
        user.role = 'user'
        user.save()
    token = jwt.encode({
        'user_id': str(user.id)
    }, secret_key, algorithm='HS256')
    return jsonify({
        'user_id': str(user.id),
        'token': token,
        'major_id': str(user.major.id)
    }), 200

追溯:

Traceback (most recent call last):
File "c:\users\anisha\env\lib\site-packages\flask\app.py", line 2292, in wsgi_app
response = self.full_dispatch_request()
File "c:\users\anisha\env\lib\site-packages\flask\app.py", line 1815, in full_dispatch_request
rv = self.handle_user_exception(e)
File "c:\users\anisha\env\lib\site-packages\flask_cors\extension.py", line 161, in wrapped_function
return cors_after_request(app.make_response(f(*args, **kwargs)))
File "c:\users\anisha\env\lib\site-packages\flask\app.py", line 1718, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "c:\users\anisha\env\lib\site-packages\flask\_compat.py", line 35, in reraise
raise value
File "c:\users\anisha\env\lib\site-packages\flask\app.py", line 1813, in full_dispatch_request
rv = self.dispatch_request()
File "c:\users\anisha\env\lib\site-packages\flask\app.py", line 1799, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "c:\users\anisha\env\lib\site-packages\flask_cors\decorator.py", line 128, in wrapped_function
resp = make_response(f(*args, **kwargs))
File "C:\Users\Anisha\sunjadv2-server\app.py", line 69, in login
'major_id': str(user.major.id)
File "c:\users\anisha\env\lib\site-packages\flask\json\__init__.py", line 321, in jsonify
dumps(data, indent=indent, separators=separators) + '\n',
File "c:\users\anisha\env\lib\site-packages\flask\json\__init__.py", line 179, in dumps
rv = _json.dumps(obj, **kwargs)
File "C:\Users\Anisha\AppData\Local\Programs\Python\Python36\lib\json\__init__.py", line 238, in dumps
**kw).encode(obj)
File "C:\Users\Anisha\AppData\Local\Programs\Python\Python36\lib\json\encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "C:\Users\Anisha\AppData\Local\Programs\Python\Python36\lib\json\encoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "c:\users\anisha\env\lib\site-packages\flask\json\__init__.py", line 81, in default
return _json.JSONEncoder.default(self, o)
File "C:\Users\Anisha\AppData\Local\Programs\Python\Python36\lib\json\encoder.py", line 180, in default
o.__class__.__name__)
TypeError: Object of type 'bytes' is not JSON serializable

当我执行print("major_id: " + str(user.major.id)) 时,它会将 ma​​jor_id: 5b55e986f15bf336e0b820fe 打印到控制台。为什么str(user.major.id) 在 jsonify 中被视为字节类型?我尝试删除'major_id': str(user.major.id),但'token': token 行会导致同样的错误。

谢谢。

【问题讨论】:

    标签: python json flask request backend


    【解决方案1】:

    您的数据似乎未正确解码。您可以在 jsonifying 之前尝试解码您的数据。

    例如,不要直接使用令牌,而是尝试使用:token.decode('utf-8')

    【讨论】:

    • 感谢您的回答,但事实证明我必须先将 str(user.id) 放入变量中,然后再将其放入 jsonify 中
    • edit:嘿,这实际上是正确的答案,我遇到了同样的问题然后使用token.decode('utf-8') 并且它有效。我不知道为什么错误显示错误的行号。谢谢!
    猜你喜欢
    • 2022-12-12
    • 2021-01-31
    • 2019-09-01
    • 2019-11-15
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    • 2022-01-17
    • 2019-11-27
    相关资源
    最近更新 更多