Python: ул (байт объекта) в jsonify вызывает TypeError: Объект типа «байт» не JSON сериализации

голоса
-1

Я послал запрос на мой API, но он бросает TypeError: объект типа «байт» не JSON сериализации. Она также возвращает 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))это напечатает major_id: 5b55e986f15bf336e0b820fe утешать. Почему str(user.major.id)рассматривается как тип байт в jsonify? Я пытался удалить , 'major_id': str(user.major.id)но тогда линия 'token': tokenбудет вызывать такую же ошибку.

Спасибо.

Задан 23/07/2018 в 13:53
источник пользователем
На других языках...                            


1 ответов

голоса
1

Кажется, что ваши данные не могут быть правильно декодировать. Вы могли бы попытаться декодировать данные перед jsonifying его.

Например, вместо того, чтобы использовать маркер непосредственно, попробуйте использовать: token.decode('utf-8')

Ответил 23/07/2018 в 13:59
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more