2012-03-07 58 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\"]" 

在第二种情况下的"需要转义