json.loads()仅使用原始字符串li解码

2024-10-09 01:21:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试执行以下代码:

str_2_load='{"source":"\u003ca href=\"http:\/\/twitter.com\" \u003eTwitter \u003c\/a\u003e"}'
json.loads(str_2_load)

获取以下错误:

File "C:\Python27\lib\json\decoder.py", line 381, in raw_decode obj, end = self.scan_once(s, idx) ValueError: Expecting , delimiter: line 1 column 26 (char 25)

但是如果我使用原始字符串文本,它就可以正常工作。 i、 e

^{pr2}$

由于str_2_load是动态分配的,因此我正在寻找解决上述问题的方法。在


Tags: 代码comjsonhttpsourcelineloadtwitter
3条回答

将所有“\”替换为“\”:

>>> 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>'}

我在python3中也遇到了同样的问题。 以下是我的方法:

方法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对象读入,因为字符串包含十六进制和控制字符。json.loads()也可以处理bytes对象,因为Python3.6。在

我相信如果你让str_2_加载一个原始字符串,在字符串的开头加上一个'r'。不知怎么的,这和正则表达式有关。在

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>'}

相关问题 更多 >

    热门问题