开发测试时,经常需要把包含中文的json对象转成json字符串后使用,如果使用str(json_obj)或者json.dumps(json_obj)转换,则生成如:{'a': {'b': u'\u4e2d\u6587'}},但我们要的结果是:{'a': {'b': '中文'}}。
前期曾有一个嵌套遍历对象的方法将中文取出来,然后拼到字符串中,方法有点笨拙。见http://hiying.net/post-32.html
本次改进,通过先转成字符串::{'a': {'b': u'\u4e2d\u6587'}}, 然后用正则表达式取出\u开头的字符串,然后逐一转成汉字,最后replace
def json_to_str(obj):
"""将Json对象转换为字符串,解决用str()或json.dumps()中文出现错误的问题"""
import re
ret = ""
#替换掉中文前的u
string = str(obj).replace("u'","'").replace('u"', '"')
#正则
p = re.compile(r'\\u[0-9A-Fa-f]{4}')
#取得所有匹配到的字符串,如\u4e2d
cn_chars =p.findall(string)
for c in cn_chars:
string = string.replace(c, u_converter(c[2:]))
return string
def u_converter(c):
"""单个汉字的转换"""
if len(c):
try:
ncode = int(c, 16)
except:
pass
try:
uchar= unichr(ncode)
except:
pass
return uchar