Как преобразовать объект unicode в строку или словарь python

В результате вызова API я получаю следующий объект <type 'unicode'> :

{"From":"en","Translations":[{"Count":0,"MatchDegree":100,"MatchedOriginalText":"","Rating":5,"TranslatedText":"Cómo estás"}]}

но когда я пытаюсь проанализировать его с помощью simplejson_loads(), я получаю эту ошибку:

simplejson.scanner.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Как я могу обращаться с такими объектами?

EDIT II: JSON правильный. Что портит ситуацию, так это спецификация в начале строки. Попытка избавиться от него с помощью .encode('utf-8-sig') приводит к ошибке

UnicodeEncodeError: 'ascii' codec can't encode character u'\ufeff' in position 2: ordinal not in range(128)

но где-то в это обсуждение я нашел решение, которое сработало для меня:

if u.startswith(u'\ufeff'):
  u = u[1:]

И я весьма склонен просто сойти с рук и быть счастливым.


person laurids    schedule 16.05.2014    source источник
comment
не могу воспроизвести. import json; json.loads(u'that string') возвращает мне ожидаемое dict.   -  person roippi    schedule 17.05.2014
comment
@roippi ты прав. Похоже на проблему с кодировкой. Я отредактировал вопрос с дополнительной информацией...   -  person laurids    schedule 17.05.2014


Ответы (2)


Попробуйте проанализировать только JSON, что находится между самым первым { и самым последним }.

Если этого недостаточно, пожалуйста, дайте нам более подробную информацию.

person kiwixz    schedule 16.05.2014
comment
Я не уверен, что ты имеешь в виду. Я пытаюсь разобрать все это, то есть с самого первого { и самого последнего}, и я сообщил об ошибке, которую получаю. В ответе API нет ничего, кроме этого JSON. - person laurids; 17.05.2014

Попробуй это:

import asp

foo = ast.literal_eval(your_result)

Это преобразует объект unicode в словарь python, это ваше решение?

person juree    schedule 17.05.2014
comment
literal_eval() работает (как и json.loads() ), но только если я сначала удалю спецификацию. Оказалось, что это и есть источник всех проблем... - person laurids; 17.05.2014