2017-02-21 15 views
1

jsonモジュールを使用して辞書に解析するJSON文字列があります。Python2 json:ユニコードの代わりに文字列を使用してロード

>>> j = '''{ 
... "first": 1, 
... "second": "two", 
... "third": { 
...  "first": "one", 
...  "second": null 
... } 
... }''' 
>>> d = json.loads(j) 
>>> pprint(d) 
{u'first': 1, 
u'second': u'two', 
u'third': {u'first': u'one', 
      u'second': None}} 

問題がunicodeとして、すべての負荷で次のように私は、loads()を使用して、これを行うことができますよ。 pythonがすべてをstringとしてロードするように強制する方法はありますか?あるいは、dictが作成された後に、深い変換を行う簡単な方法があります。

注:私は人々が尋ねるだろうと知っているので、私が得たキーと値にはASCII文字と記号だけが含まれると想定するのは安全です。したがって、特殊文字に問題はありません。

答えて

4

json.loads()object_hookまたはobject_pairs_hookパラメータを指定できます。

from pprint import pprint 
import json 

def str_hook(obj): 
    return {k.encode('utf-8') if isinstance(k,unicode) else k : 
      v.encode('utf-8') if isinstance(v, unicode) else v 
      for k,v in obj} 

j = '''{ 
    "first": 1, 
    "second": "two", 
    "third": { 
    "first": "one", 
    "second": null 
    } 
}''' 
d = json.loads(j, object_pairs_hook=str_hook) 
pprint(d) 
関連する問題