python json load/loads 加载为unicode编码

今天开发遇到了一个大坑,读取json文件后,转化的json对象无法获取到对应的val。

最后定位到问题,发现key-val全是unicode编码,获取时传入的键值却是str类型。
最后上网查了一下,

  • 一种是用yaml、其他包进行解析
  • 一种是用自定义的函数进行拆解 encode
  • 一种是用自定义函数传入load进行拦截(object_hock),对对象进行处理为str类型
>>> import json
>>> import yaml
>>> list_org = ['a', 'b']
>>> list_dump = json.dumps(list_org)
>>> list_dump
'["a", "b"]'
>>> json.loads(list_dump)
[u'a', u'b']
>>> yaml.safe_load(list_dump)
['a', 'b']

递归的进行转换,写的比较巧妙

def convert(input):
    if isinstance(input, dict):
        return {convert(key): convert(value) for key, value in input.iteritems()}
    elif isinstance(input, list):
        return [convert(element) for element in input]
    elif isinstance(input, unicode):
        return input.encode('utf-8')
    else:
        return input
json.load(filepoint,object_hook=convert)

你可能感兴趣的:(python json load/loads 加载为unicode编码)