2011-04-12 58 views
0

我想解析Python中使用simplejson的谷歌翻譯結果。但我得到以下異常。Python JSON谷歌翻譯與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'? 'unicode'?別的東西?你爲什麼認爲你需要做'str(trans_text)'? – 2011-04-12 07:18:13

+0

當我試圖用simplejson解析時,它會拋出錯誤,說它應該是字符串或流。我不知道爲什麼它不把它看作字符串。因此我需要str()。 – 2011-04-14 05:49:07

+0

這是我對trans文本的翻譯{'translations':[{'translatedText':'hola'}]} – 2011-04-14 05:51:05

回答

4

你正在做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'] 
+0

這工作。謝謝。 – 2011-04-14 10:31:38

4

的問題是,simplejson支持JSON用雙引號編碼字符串,而不是單引號編碼字符串,這樣一個天真的解決方案可能是

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

-1這是一個**可怕的**天真的解決方案,甚至可能不是問題!它正在解決**症狀**,因爲Google的根本原因表面上發出帶有錯誤引號的JSON字符串尚未被調查。 – 2011-04-12 07:55:17

+0

此解決方案導致其他問題,如翻譯內容具有單引號替換所有更改,雙引號及其含義發生更改,並且還會導致解析器異常。還有更多想過如何解決這個問題? – 2011-04-14 05:53:32

+0

@Ananth Duari:看到我的答案。 – 2011-04-14 07:16:45

2

JSON語法不支持JavaScript的完整語法。與JavaScript不同,JSON字符串和屬性名稱必須用雙引號引起來。

:: = "" | "字符"