在使用python的json模塊對json字串反序列化成python對象的時候出現的字符串都是unicode類型,而不是python內置的str類型。在某種使用場景下用戶必須做顯式的轉換才能正常使用,徒增一些麻煩,為解決這一問題封裝下述函數。
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
對於采用python反序列化后的python對象再調用一次convert函數即可,當然也可以再loads的時候指定object_hook即可。
示例如下:
In [38]: data = {'key1': 'data1',
....: 'key2': 'data2'}
In [39]: json_str = json.dumps(data)
In [40]: print json_str
{"key2": "data2", "key1": "data1"}
In [41]: print json.loads(json_str)
{u'key2': u'data2', u'key1': u'data1'}
In [42]: print convert(json.loads(json_str))
{'key2': 'data2', 'key1': 'data1'}
In [43]:
