我是接口调用方,今天在联调的时候,接口方的同学问我传过来的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可能更好。