2012-03-07 83 views
0

之間是什麼difrence:爲s2s1Python字符串json.loads錯誤

  1. s1 = '["a"]'

  2. s2 = "['a']"

當我做json.loads,我得到以下錯誤罰款:

>>> s1='["a2"]' 
>>> s2="['a2']" 
>>> json.loads(s1) 
[u'a2'] 
>>> json.loads(s2) 
raise ValueError("No JSON object could be decoded") 
ValueError: No JSON object could be decoded 
+0

我不熟悉'json',但該方法是否需要特定的輸入字符串格式? – lllluuukke 2012-03-07 03:09:58

+0

請更正您的代碼和異常信息 - 由於您定義了's1'兩次,但您不定義's2',所以異常應該是'NameError'。請更正您的代碼,以便正確顯示您看到的內容。 – Tadeck 2012-03-07 03:11:07

+1

@Ashish:好的,我已更正並格式化您的問題。 – Tadeck 2012-03-07 03:20:04

回答

7

問題是JSON用來引用值,不是單一的那些(')雙引號(")。

這意味着異常,因爲無效JSON的拋出:

  • 這是無效的JSON:['a']
  • 這是有效的JSON:["a"]

也是一個正確的例子如下,不同比你的:

>>> import json 
>>> s1 = "['a']" 
>>> s2 = '["a"]' 
>>> json.loads(s1) 
... some traceback removed ... 
ValueError: No JSON object could be decoded 
>>> json.loads(s2) 
[u'a'] 

編輯:我已經更新了正確的輸出OP的問題必須已經看到,而不是他/她發佈了什麼(json.loads('["a2"]')沒有丟錯,json.loads("['a2']")是)。

3

json引號是不可以像Python那樣互換的。

>>> import json 
>>> print json.dumps("['a']") 
"['a']" 
>>> print json.dumps('["a"]') 
"[\"a\"]" 

在第二種情況下的"需要轉義