Как получить строковые объекты вместо Unicode из JSON? - PullRequest
264 голосов
/ 05 июня 2009

Я использую Python 2 для анализа JSON из ASCII-кодированных текстовых файлов.

При загрузке этих файлов с json или simplejson все мои строковые значения преобразуются в объекты Unicode вместо строковых объектов. Проблема в том, что я должен использовать данные с некоторыми библиотеками, которые принимают только строковые объекты. Я не могу ни изменить библиотеки , ни обновить их.

Возможно ли получить строковые объекты вместо Unicode?

Пример

>>> import json
>>> original_list = ['a', 'b']
>>> json_list = json.dumps(original_list)
>>> json_list
'["a", "b"]'
>>> new_list = json.loads(json_list)
>>> new_list
[u'a', u'b']  # I want these to be of type `str`, not `unicode`

Обновление

Этот вопрос был задан давным-давно , когда я застрял с Python 2 . Одним из простых и понятных решений на сегодняшний день является использование последней версии Python - т.е. Python 3 и более поздних версий.

Ответы [ 21 ]

0 голосов
/ 20 июня 2011

Я тоже столкнулся с этой проблемой, и, имея дело с JSON, я придумал небольшой цикл, который преобразует Unicode-ключи в строки. (simplejson в GAE не возвращает строковые ключи.)

obj - это объект, декодированный из JSON:

if NAME_CLASS_MAP.has_key(cls):
    kwargs = {}
    for i in obj.keys():
        kwargs[str(i)] = obj[i]
    o = NAME_CLASS_MAP[cls](**kwargs)
    o.save()

kwargs - это то, что я передаю конструктору приложения GAE (которому не нравятся unicode ключи в **kwargs)

Не такой надежный, как у Уэллса, но гораздо меньше.

...