2011-04-12 2 views
0

Python에서 simplejson을 사용하여 Google 번역 결과를 구문 분석하려고합니다. 하지만 다음과 같은 예외가 발생합니다.Python JSON Google 번역기 Simplejson 문제로 구문 분석

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'}]} 

처럼 보이는?

+0

"json 개체"와 같은 것은 없습니다. * 문자열 *로 시작합니다. 'repr (trans_text)'의 결과를 보여주세요. 구글 번역 API 문서는'trans_text'가'str'이라고 뭐라고합니까? '유니 코드'? 다른 것? 왜 당신은'str (trans_text)'을 할 필요가 있다고 생각합니까? –

+0

simplejson으로 구문 분석하려고하면 문자열이나 스트림 중 하나 여야한다고 오류가 발생합니다. 왜 객체를 문자열로 간주하지 않는지 나는 알지 못합니다. 그러므로 나는 그것을 처리해야한다. –

+0

이것은 번역 텍스트의 번역본입니다. '번역': [{ 'translatedText': 'hola'}]} –

답변

4

하지 문자열 (STR 또는 유니 코드) 또는 버퍼 개체입니다. 이것은 simplejson 오류 메시지 목격하고 repr(trans_text)의 보고서입니다 :

이 트랜스 텍스트 내에 repr {'translations': [{'translatedText': 'hola'}]}

trans_text사전입니다.

JSON 문자열로 변환하려면 simplejson.loads()이 아닌 simplejson.dumps()을 사용해야합니다.

결과를 다른 것으로 사용하려면 데이터를 추출해야합니다.

# Your other example 
trans_text = {'translations': [{'translatedText': 'fleur'}, {'translatedText': 'voiture'}]} 
for x in trans_text['translations']: 
    print "chunk of translated text:", x['translatedText'] 
+0

이것은 효과가 있습니다. 감사. –

4

문제는 simplejson가 큰 따옴표 인코딩 된 문자열을 JSON을 지원하지 따옴표 인코딩 된 문자열이 너무 순진 솔루션은 자바 스크립트의 전체 구문을 지원하지 않습니다

json.loads(jsonstring.replace("'", '"')) 
+0

-1 그게 문제가되지 않을 수도있는 ** 끔찍하게 ** 순진한 해결책입니다! 잘못된 인용 부호가있는 JSON 문자열을 표면적으로 내보내는 Google의 근본 원인을 조사하지 않은 ** 증상 **을 해결합니다. –

+0

이 솔루션은 번역 내용에 작은 따옴표가있는 경우 모두 바꾸기 때문에 큰 따옴표가 변경되고 의미가 변경되고 파서 예외가 발생하는 등 다른 문제가 발생합니다. 더 이상이 문제를 해결하는 방법에 대한 생각은 없습니까? –

+0

@Ananth Duari : 제 대답을보십시오. –

2

JSON 구문이 될 수 있다는 것입니다. 자바 스크립트와 달리 JSON 문자열과 속성 이름은 큰 따옴표로 묶어야합니다.

문자열 :: = "" | 당신은 simplejson.loads(str(trans_text))

trans_text을하고 "문자"