bytes 不能转化成 Json 序列吗

2016-03-21 20:54:10 +08:00
 JhOOOn

我使用的: Ubuntu14.04 , python3.5 , 在 virtualenv 环境下,运行一个 Flask 小程序:使用 itsdangerous 生成 token , 使用 Flask 的 jsonify 返回,出现了如下错误:

File "/usr/lib/python3.5/json/encoder.py", line 180, in default
    raise TypeError(repr(o) + " is not JSON serializable")
TypeError: b'eyJhbGciOiJIUzI1NiIsImlhdCI6MTQ1ODU2NDQ3MywiZXhwIjoxNDU4NTY4MDczfQ.eyJ1aWQiOiI1NzEwMTk0MTI5In0.Z66p5rxbUqWT_pbdonK8Im6VXHLP_gEZPW71sWn0b-s' is not JSON serializable

代码大概如下:

from itsdangerous import TimedJSONWebSignatureSerializer as Serializer

def return_token():
  utoken = gen_token()
  return jsonify({'access_token': utoken}), 200
 
def gen_token():
  s = Serializer('sercret_key', expires_in=3600)
  return s.dumps({'uid': self.uid})

6754 次点击
所在节点    Flask
8 条回复
knightdf
2016-03-21 20:59:50 +08:00
你跟我把字节打印出来看看。。。不就是二进制串么。。。
JhOOOn
2016-03-21 21:05:56 +08:00
@knightdf 上面的错误里,有打印出来的字节,以前用过(难道我记错了?),可以序列化的,换个电脑就不行了,不知道哪里又配置错了
billlee
2016-03-21 21:09:31 +08:00
JSON 里面没有二进制类型,要么把 bytes 解码成 unicode 字符串,要么编码成 base64
wizardforcel
2016-03-21 21:34:13 +08:00
@billlee 或者转成 int 数组。
knightdf
2016-03-21 21:35:31 +08:00
@JhOOOn 什么叫打印出来的字节。。那只不过是按你默认编码转换过来的字符而已。。。
JhOOOn
2016-03-21 21:40:59 +08:00
@billlee 使用 base64 encode 也是类 bytes 类型,不好使的,

return base64.b64encode(s.dumps({'uid': self.uid}))

我的 s.dumps()返回有问题,正常应该是一个 str ,为什么会是一个 bytes 呢?
JhOOOn
2016-03-21 21:48:14 +08:00
@billlee 谢谢, decode 字符串就好了,理解错了,问题关了把。
Tianny
2017-12-14 21:32:21 +08:00
@JhOOOn 你好 我也遇到了同样的问题。具体怎么改呀?能贴下改完后的代码吗?谢谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/265254

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX