Синтаксический анализ Python JSON Google Translator с проблемой Simplejson - PullRequest
0 голосов
/ 12 апреля 2011

Я пытаюсь проанализировать результат перевода Google, используя simplejson в Python.Но я получаю следующее исключение:

Traceback (most recent call last):
  File "Translator.py", line 45, in <module>
    main()
  File "Translator.py", line 41, in main
    parse_json(trans_text)
  File "Translator.py", line 29, in parse_json
    json = simplejson.loads(str(trans_text))
  File "/usr/local/lib/python2.6/dist-packages/simplejson-2.1.3-py2.6-linux-i686.egg/simplejson/__init__.py", line 385, in loads
    return _default_decoder.decode(s)
  File "/usr/local/lib/python2.6/dist-packages/simplejson-2.1.3-py2.6-linux-i686.egg/simplejson/decoder.py", line 402, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/local/lib/python2.6/dist-packages/simplejson-2.1.3-py2.6-linux-i686.egg/simplejson/decoder.py", line 418, in raw_decode
    obj, end = self.scan_once(s, idx)
simplejson.decoder.JSONDecodeError: Expecting property name: line 1 column 1 (char 1)

Это мой объект json выглядит как

{'translations': [{'translatedText': 'fleur'}, {'translatedText': 'voiture'}]}

Может кто-нибудь сказать мне, в чем здесь проблема?

Ответы [ 3 ]

4 голосов
/ 14 апреля 2011

Вы делаете simplejson.loads(str(trans_text))

trans_text - это НЕ строка (str или unicode) или объект буфера. Об этом свидетельствует сообщение об ошибке simplejson и ваше сообщение repr(trans_text):

Это мой реп текст транс {'translations': [{'translatedText': 'hola'}]}

trans_text - это словарь .

Если вы хотите преобразовать это в строку JSON, вам нужно использовать simplejson.dumps(), а не simplejson.loads().

Если вы хотите использовать результат для чего-то другого, вам просто нужно выкопать данные, например.

# Your other example
trans_text = {'translations': [{'translatedText': 'fleur'}, {'translatedText': 'voiture'}]} 
for x in trans_text['translations']:
    print "chunk of translated text:", x['translatedText']
4 голосов
/ 12 апреля 2011

Проблема в том, что simplejson поддерживает json со строками, закодированными в двойных кавычках, а не со строками, закодированными в одинарных кавычках, поэтому наивное решение может быть

json.loads(jsonstring.replace("'", '"'))
2 голосов
/ 12 апреля 2011

Синтаксис JSON не поддерживает полный синтаксис JavaScript. В отличие от JavaScript, строки JSON и имена атрибутов должны заключаться в двойные кавычки.

строка :: = "" | " символов "

...