2014-05-08 131 views
0

我使用Python 3.4,不得不解析JSON這樣ValueError異常試圖解析JSON

[['A', 'B', 1.3750], ['X', 'Y', 0.7097]] 

,我嘗試使用JSON模塊時,json.loads函數將其解析爲Python對象,但我得到

ValueError: Expecting value: line 1 column 3 (char 2) 

那麼,我能做些什麼來解析這個JSON?

+5

您的JSON無效。在http://jsonlint.com/檢查它,並且在它有效之前不要嘗試解析它JSON –

+0

這是web API返回的內容,JavaScript中使用了什麼,所以我必須以某種方式處理這個問題。 – adontz

+1

您應該聯繫任何製作API的人,然後通知您在JSON中使用「引用而非引用」 –

回答

5

JSON中的字符串需要雙引號,而不是單引號。

改變輸入到這個樣子解析使用Python 2.7:

[["A", "B", 1.3750], ["X", "Y", 0.7097]] 

編輯:看到您的評論之後,你需要做一些字符串操作(例如,替換所有單引號雙引號)從Web API接收的數據,以使其成爲有效的JSON。

+0

哦,替換(「'」,「\」「)解決了這個問題。謝謝! – adontz

+0

@adontz你應該仍然通知API的所有者,它返回的數據是無效的或所有使用它的人都會遇到這個問題 –

+0

我已經這樣做了,但它是銀行,他們不在乎,說實話。 – adontz

0

它是不是有效的JSON,但有效的字面蟒蛇您可以通過使用解析它ast.literal_eval

import ast 
ast.literal_eval("[['A', 'B', 1.3750], ['X', 'Y', 0.7097]]") 
0

你有兩個主要問題:

  • 根項目是不是一個對象
  • 字符串用單引號而不是雙引號分隔。

如果你真的想解析爲JSON,你必須先做一些清理。例如:

import json 

json_input = "[['A', 'B', 1.3750], ['X', 'Y', 0.7097]]" 

print json.loads('{"value": %s}' % json_input.replace("'", '"'))['value'] 

的問題,這是它非常脆弱,因爲源可以發送類似"'",它會被轉換爲'''這會造成問題。如果你試圖解決這個問題的路線太慢了,那麼你基本上就是在編寫一個解析器。