如何在Python中将JSON Unicode响应转换为字符串?
如何将Python中的Unicode键值对JSON转换为普通字符串?
刚好碰到过类似的需求,给你几个实用的解决办法,根据你的Python版本来选就行:
1. 递归遍历转换(适合Python 2环境)
如果是在Python 2里,我们可以写一个递归函数,逐层遍历字典、列表里的所有元素,把带u前缀的Unicode字符串转换成普通的str类型:
def convert_unicode_to_str(data): if isinstance(data, dict): return {convert_unicode_to_str(key): convert_unicode_to_str(value) for key, value in data.items()} elif isinstance(data, list): return [convert_unicode_to_str(element) for element in data] elif isinstance(data, unicode): return data.encode('utf-8') else: return data # 测试你的数据 response = {u'connections': [{u'pair': [u'5', u'14'], u'routes': [[u'5', u'6', u'13', u'14'], [u'5', u'7', u'10', u'4', u'14']]}], u'succeeded': True} converted_response = convert_unicode_to_str(response) print(converted_response)
这个函数会自动处理所有嵌套的字典和列表,把每个Unicode字符串转成UTF-8编码的普通字符串,其他类型(比如布尔值True)会直接保留。
2. 用json模块一键转换(简单粗暴)
不想自己写递归?直接用Python内置的json模块序列化再反序列化,就能自动把所有Unicode转成普通字符串:
import json response = {u'connections': [{u'pair': [u'5', u'14'], u'routes': [[u'5', u'6', u'13', u'14'], [u'5', u'7', u'10', u'4', u'14']]}], u'succeeded': True} converted_response = json.loads(json.dumps(response)) print(converted_response)
这个方法的好处是不用关心数据的嵌套结构,json模块会帮你搞定所有层级的转换,唯一要注意的是如果数据里有JSON不能序列化的类型(比如自定义类实例)就不能用,但你的例子里都是基础类型,完全没问题。
3. Python 3环境下无需额外转换
如果你是在Python 3里操作,其实根本不用做任何转换!因为Python 3里的str本身就是Unicode类型,你看到的带u前缀的写法只是Python 2的语法残留,实际在Python 3中打印这个数据,输出就是你想要的不带u的格式,两种写法在Python 3里是完全等价的。
内容的提问来源于stack exchange,提问作者wyse12
相关产品推荐
相关产品推荐

