我是接口调用方,今天在联调的时候,接口方的同学问我传过来的json是神马玩意,怎么每个item前还带个u的。
我看了一眼,我靠,还真是带个u的,自己调试的时候楞是没发现。也怪自己以前没怎么遇到过Python的编码坑,这次重新用起Python2来,一不小心就踩进坑了。
一通debug发现是Python自带的Json库会把json文件load成Unicode对象。如果想要变成str对象的话,就要自己去encode。
祭出so大法...#请叫我so搬运工
def byteify(input):
if isinstance(input, dict):
return {byteify(key):byteify(value) for key,value in input.iteritems()}
elif isinstance(input, list):
return [byteify(element) for element in input]
elif isinstance(input, unicode):
return input.encode('utf-8')
else:
return input
这个函数递归的把list和dict里的Unicode对象encode成str。
当然,我不觉得这是the right way。使用yaml里的json来代替官方自带的json可能更好。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。