Ted

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

开发测试时,经常需要把包含中文的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

转载自:包含中文的json对象转成字符串的方法(二)



posted on 2011-12-25 00:41  wufawei  阅读(1125)  评论(0编辑  收藏  举报