在Python中加载JSON字符串的最佳方法是什么?
我想使用json.loads来处理这样的unicode:
import json
json.loads(unicode_string_to_load)
我也尝试使用'utf-16'值提供'encoding'参数,但错误并没有消失。
完整SSCCE,错误:
# -*- coding: utf-8 -*-
import json
value = '{"foo" : "bar"}'
print(json.loads(value)['foo']) #This is correct, prints 'bar'
some_unicode = unicode("degradé")
#last character is latin e with acute "\xe3\xa9"
value = '{"foo" : "' + some_unicode + '"}'
print(json.loads(value)['foo']) #incorrect, throws error
错误:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position
6: ordinal not in range(128)
答案 0 :(得分:9)
我使用'latin-1'将字符串转换为unicode字符串,修复了错误:
UnicodeDecodeError: 'utf16' codec can't decode byte 0x38 in
position 6: truncated data
固定代码:
import json
ustr_to_load = unicode(str_to_load, 'latin-1')
json.loads(ustr_to_load)
然后不会抛出错误。
答案 1 :(得分:6)
OP澄清(在评论中!)......:
源数据是巨大的unicode编码 串
然后你必须知道它使用的许多unicode编码 - 显然不是'utf-16',因为那个失败了,但还有很多其他的 - 'utf-8' ,'iso-8859-15',等等。您可以尝试全部操作,也可以print repr(str_to_load[:80])
将其显示的内容粘贴到您的问题编辑中,以便我们代表您猜测! - 。
答案 2 :(得分:5)
我找到的最简单的方法是
import simplejson as json
这样你的代码保持不变
json.loads(str_to_load)
答案 3 :(得分:1)
使用django,您可以使用SimpleJSON并使用加载而不是仅加载。
from django.utils import simplejson
simplejson.loads(str_to_load, "utf-8")