问题:json.loads(xxx)
后报错ValueError: No JSON object could be decoded
原因:注意是unicode
编码和'
单引号问题引起
解决:
-
方法一:将xxx先作字符串转化
xxx.replace("u'", '"').replace("'", '"')
,然后再json.loads(xxx.replace("u'", '"').replace("'", '"'))
即可 -
方法二:使用Python内置函数
eval(expression[, globals[, locals]])
解决
说明:eval()
用来执行一个字符串表达式,并返回表达式的值,强调:eval()
可以将字符串转成表达式并执行,所以就可用该函数执行系统命令、删除文件等危险操作,因此要注意安全性
具体示例如下:
>>> test = "[[u'a',u'b'],[u'1',0]]"
>>> json.loads(test)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 339, in loads
return _default_decoder.decode(s)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 364, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 382, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
>>> type(test)
<type 'str'>
>>> test.replace("u'", '"').replace("'", '"')
'[["a","b"],["1",0]]'
>>> type(test.replace("u'", '"').replace("'", '"'))
<type 'str'>
>>> json.loads(test.replace("u'", '"').replace("'", '"'))
[[u'a', u'b'], [u'1', 0]]
>>> eval(test)
[[u'a', u'b'], [u'1', 0]]