如何使用python json模块处理带有转义Unicode字符的JSON?

时间:2012-08-14 16:13:48

标签: python json google-app-engine unicode

编辑:错误不会出现在提示中,而是出现在以下Google App Engine环境中。 Code execution environment 我跟随json

>>>dat = r"""{"name":"Something", "data":"For youth \n\nBe a hero! Donate blood!\n\u091c\u092f \u0939\u093f\u0902\u0926! \u0935\u0928\u094d\u0926\u0947 \u092e\u093e\u0924\u0930\u092e\u094d"}"""

它包含unicode转义字符。 我想解析这个。所以我做了

>>>jsDat = json.loads(js)

然后是作品

>>>name = jsDat.get('name')
>>>name = name.encode('ascii') #This is because json module handles in unicode
>>>print name
Something

但是尝试使用unicode数据的字段,即“数据”,会显示错误

>>>data = jsDat.get('data')
UnicodeEncodeError: 'ascii' codec can't encode characters in position 366-367: ordinal not in range(128)

我应该如何解析数据?

2 个答案:

答案 0 :(得分:1)

如果字符超过ASCII字符集,则无法将unicode编码为ASCII。如果要强制转换并丢失数据,可以执行以下操作:

data = jsDat.get('data')
data = data.encode('ascii', 'ignore')

有关忽略的详细信息,请参阅str.encode的文档。

顺便说一句,我不确定你为什么要尝试编码为ASCII - JSON模块似乎处理那个原始字符串就好了?

答案 1 :(得分:1)

错误来自您的“打印”行,并且只是因为您尝试打印到不了解编码的“终端”。使用JSON对象执行任何其他操作不应产生错误。