2017-02-21 12 views
1

У меня есть строка json, которую я хочу проанализировать в словаре, используя встроенный модуль json. Я в состоянии сделать это, используя loads() следующим образом:Python2 json: загрузка с использованием строк вместо unicode

>>> 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. Есть ли способ заставить python загружать все как string? Кроме того, существует простой способ сделать глубокую конвертацию после создания dict.

ПРИМЕЧАНИЕ. Поскольку я знаю, что люди спросят, можно с уверенностью предположить, что ключи и значения, которые я получаю, будут содержать только символы и символы ASCII, поэтому у меня не будет проблем со специальными символами.

ответ

4

Вы можете указать object_hook или object_pairs_hook параметр json.loads().

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)