我正在尝试执行以下代码:
str_2_load='{"source":"\u003ca href=\"http:\/\/twitter.com\" \u003eTwitter \u003c\/a\u003e"}'
json.loads(str_2_load)
收到以下错误:
文件“C:\ Python27 \ lib \ json \ decoder.py”,第381行,在raw_decode中 obj,end = self.scan_once(s,idx)ValueError:Expecting,delimiter:第1行第26列(char 25)
但是如果我使用原始字符串文字,它可以正常工作。 即。
str_2_load=r'{"source":"\u003ca href=\"http:\/\/twitter.com\" \u003eTwitter \u003c\/a\u003e"}'
json.loads(str_2_load)
由于str_2_load
是动态分配的,我正在寻找上述问题的修复方法。
答案 0 :(得分:-1)
将所有'\'替换为'\\':
>>> str_2_load='{"source":"\\u003ca href=\\"http:\\/\\/twitter.com\\" \\u003eTwitter \\u003c\\/a\\u003e"}'
>>> json.loads(str_2_load)
{u'source': u'<a href="http://twitter.com" >Twitter </a>'}
答案 1 :(得分:-1)
在 Python 3 中,我遇到了同样的问题。 这是我的方法:
方法1 :按照其他人的建议,通过在字符串前面添加r'...'
,将字符串转换为原始字符串。正如您在下面看到的。
>>> json.loads('''{"source":"\u003ca href=\"http:\/\/twitter.com\" \u003eTwitter \u003c\/a\u003e"}''')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/__init__.py", line 354, in loads
return _default_decoder.decode(s)
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/decoder.py", line 355, in raw_decode
obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Expecting ',' delimiter: line 1 column 21 (char 20)
>>> json.loads(r'''{"source":"\u003ca href=\"http:\/\/twitter.com\" \u003eTwitter \u003c\/a\u003e"}''')
{'source': '<a href="http://twitter.com" >Twitter </a>'}
方法2 :您应该将字符串读为bytes
对象,因为您的字符串包含十六进制和控制字符。自Python3.6起,json.loads()
也可以处理bytes
对象。
答案 2 :(得分:-1)
我相信如果您通过在字符串的开头添加“ r”来使str_2_load成为原始字符串。不知何故,这与正则表达式有关。
str_2_load=r'{"source":"\u003ca href=\"http:\/\/twitter.com\" \u003eTwitter \u003c\/a\u003e"}'
json.loads(str_2_load)
#output {'source': '<a href="http://twitter.com" >Twitter </a>'}