PythonでJSON文字列をロードする最良の方法は何ですか?
Json.loadsを使用して、次のようにユニコードを処理したいと思います。
import json
json.loads(unicode_string_to_load)
また、 'encoding'パラメーターに値 'utf-16'を指定してみましたが、エラーは解消されませんでした。
エラーのある完全な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)
'latin-1'を使用して文字列をユニコード文字列に型キャストすると、エラーが修正されました。
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)
そして、エラーはスローされません。
OPは(コメントで!)明確にします...:
ソースデータは、Unicodeでエンコードされた巨大な文字列です
それからあなたはそれが使う多くのユニコードエンコーディングのwhichを知る必要があります-明らかにそれは失敗したので 'utf-16'ではありませんが、他にもたくさんあります-'utf-8'、 'iso -8859-15 'など。問題が解決するまですべて試してみるか、print repr(str_to_load[:80])
に表示されている内容を質問の編集として貼り付けて、私たちが推測できるようにします!-)。
私が見つけた最も簡単な方法は
import simplejson as json
そうすれば、コードは同じままです
json.loads(str_to_load)
Djangoを使用すると、単純なロードの代わりにSimpleJSONを使用してロードを使用できます。
from Django.utils import simplejson
simplejson.loads(str_to_load, "utf-8")