0

我从 LAN 连接中抓取了一个 json,但我无法通过 json.loads 解析它。

正如您在底部看到的那样,我正在尝试从文本行中获取所有 html。

我收到以下错误:ValueError: Expecting , delimiter: line 9 column 39 (char 222)

import json
import urllib2
##json_data = urllib2.urlopen("http://192.168.1.221:39285/set/json/sec", timeout=30).read()
json_data = """
    {
        "line_type":"Test",
        "title":"Test",
        "timestamp":"201310201628",
        "line": [
                                            { 
                "id":2,
                "text": "<span class=\"prefix\">\n                                Result            <\/span>\n            \n"                } ,                                             { 
                "id":1,
                "text": "<span class=\"prefix\">\n                                Result            <\/span>\n            \n"                }                     ]
    }
"""

s = json.loads(r'{}'.format(json_data))
print s['line']

我希望能够打印:<span class=\"prefix\">\n Testing <\/span>\n \n <span class=\"prefix\">\n Test <\/span>\n \n

任何帮助将非常感激

我应该提到我正在寻找正则表达式或解决方法......

4

1 回答 1

1

尝试打印json_data。这就是你会看到的:

    {
        "line_type":"Test",
        "title":"Test",
        "timestamp":"201310201628",
        "line": [
                                            { 
                "id":2,
                "text": "<span class="prefix">
                                Testing            <\/span>

"                } ,                                             { 
                "id":1,
                "text": "<span class="prefix">
                                Test            <\/span>

"                }                     ]
    }

显然,它不是有效的 JSON。您对转义有一些混淆:

  1. 引号必须转义为\\":第一个反斜杠是 Python 字符串的转义,第二个反斜杠是 JSON 字符串文字的转义。
  2. JSON 字符串文字中不能有文字换行符;您必须将它们写为\n,因此在 Python 字符串中它们应该写为\\n.
  3. (不确定)您不需要转义正斜杠,还是<\/span>实际上是想要的结果?

r""" """(注意:如果您使用字符串文字,则可以摆脱一级转义。)

在这些更改之后,可以加载 JSON:

>>> s = """
...     {
...         "line_type":"Test",
...         "title":"Test",
...         "timestamp":"201310201628",
...         "line": [
...                                             { 
...                 "id":2,
...                 "text": "<span class=\\"prefix\\">\\n                                Testing            </span>\\n            \\n"                } ,                                             { 
...                 "id":1,
...                 "text": "<span class=\\"prefix\\">\\n                                Test            </span>\\n            \\n"                }                     ]
...     }
... """
>>> 
>>> json.loads(s)
{'line': [{'text': '<span class="prefix">\n                                Testing            </span>\n            \n', 'id': 2}, {'text': '<span class="prefix">\n                                Test            </span>\n            \n', 'id': 1}], 'timestamp': '201310201628', 'title': 'Test', 'line_type': 'Test'} 
于 2013-10-21T04:24:18.277 回答