Python使用转义双引号解析JSON

时间:2015-09-22 22:59:50

标签: python json encoding

考虑这个有效的json:

{"a": 1, "b": "{\"c\":2}"}

Python的json模块在​​我尝试解析时抛出 - 看起来\"正在抛弃它:

json.loads('{"a": 1, "b": "{\"c\":2}"}')
Traceback (most recent call last):
  File "", line 1, in 
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 338, in loads
    return _default_decoder.decode(s)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 365, 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 381, in raw_decode
    obj, end = self.scan_once(s, idx)
ValueError: Expecting , delimiter: line 1 column 15 (char 14)

有没有办法在Python中解析它,使用json模块或其他模块如ujson

2 个答案:

答案 0 :(得分:2)

实际上,对于转义双引号并不重要。看我的测试:

>>> json.loads('{"a": 1, "b": "{\"c\":2}"}')
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/usr/lib/python3.4/json/__init__.py", line 318, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python3.4/json/decoder.py", line 343, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python3.4/json/decoder.py", line 359, in raw_decode
    obj, end = self.scan_once(s, idx)
ValueError: Expecting ',' delimiter: line 1 column 18 (char 17)

>>> json.loads('{"a": 1, "b": "{"c":2}"}')
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/usr/lib/python3.4/json/__init__.py", line 318, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python3.4/json/decoder.py", line 343, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python3.4/json/decoder.py", line 359, in raw_decode
    obj, end = self.scan_once(s, idx)
ValueError: Expecting ',' delimiter: line 1 column 18 (char 17)

>>> json.loads('{"a": 1, "b": {"c":2}}')
{'a': 1, 'b': {'c': 2}}

>>> json.loads('{"a": 1, "b": {\"c\":2}}')
{'a': 1, 'b': {'c': 2}}

>>> 

答案 1 :(得分:0)

在引用的字符串中,<html lang="en"> <head> <meta charset="utf-8"> <title>Music Project</title> <link href="MusicProject.css" rel="stylesheet"> <style> #header { background-color: #888888; height: 380px; margin: 0px; padding: 0px; } body { background-color: #C0C0C0; margin: 0px; padding: 0px; } #main { overflow: auto; } #content { float: left; } #side { float: left; } #nav { height: 42px; background-color: #888888; } #nav ul { list-style-type: none; height: 30px; padding: 0px; margin: 0px; } #nav ul li { float: left; margin: 10px; width: 246px; text-align: center; font-family: "Arial"; font-size: 23px; color: #00004B; } #nav ul li a { display: inline; width: 246px; } </style> </head> <body> <header> <div id="header"> <h1 style="margin-top: -155px; text-align:center;"><img src="logo.png" alt="logo" id="logo" height="500" width="700" /></h1> </div> <div id="nav"> <ul> <li><a href="Music Project.html">Home</a></li> <li><a href="Artist.html">Artists</a></li> <li><a href="album.html">Mixtapes/Albums</a></li> <li><a href="suggestions.html">Suggestions</a></li> <li><a href="about.html">About</a></li> </ul> </div> </header> <content> <!-- Page content here --> </content> </body> </html> 的处理方式与常规引用相同:

\"

因此,您的字符串不是有效的JSON。

您还需要转义反斜杠,以便将它们发送到>>> '{"a": 1, "b": "{\"c\":2}"}' '{"a": 1, "b": "{"c":2}"}' 。您可以通过使用loads

对所需词典进行编码来查看此内容
dumps