【发布时间】:2017-08-14 07:38:24
【问题描述】:
我正在编写一个 Flask 应用程序,其中我有一个服务,它生成一个 JWT,并在将其解码为“UTF-8”后使用 requests.post() 将其传递给另一个服务。
在发送 JWT 时,我可以看到类型是“str”。但是,在其他服务上执行 json.loads() 时,我收到一条错误提示
TypeError:JSON 对象必须是 str,而不是 'bytes'
这是我的代码:
服务 1:
@app.route('/')
def index():
token = jwt.encode({'message': 'Hello'}, app.config['SECRET_KEY'])
# After this statement I am able to verify the type is str and not bytes
token = token.decode('UTF-8')
headers = {'content-type': 'application/json'}
url = 'someUrl'
data = {"token": token}
data = json.dumps(data)
requests.post(url, data=data, headers=headers)
return 'Success'
服务 2:
@app.route('/', methods=['POST'])
def index():
data = json.loads(request.data)
return 'Success'
为什么即使类型转换为字符串,我也会收到此错误?
编辑:我能够通过标头传递令牌成功检索令牌。但我还是想知道是什么导致了这个错误。
【问题讨论】:
-
尝试删除
token = token.decode('UTF-8') -
这给了我一个“不可序列化的 JSON 类型错误”。需要在json.dumps之前解码为'UTF-8'
-
将
data = json.loads(request.data)更改为data = request.get_json()可能是一种可能的解决方法。
标签: json python-3.x flask python-requests jwt