Python2 JSON.load成Unicode的坑

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

相关推荐