从LAN连接刮取JSON文件并使用json.loads()解析的分隔符问题

时间:2013-10-21 04:06:25

标签: python regex json python-2.7

我从局域网连接中抓取了一个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

非常感谢任何帮助

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

1 个答案:

答案 0 :(得分: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>实际上是一个理想的结果吗?
  4. (注意:如果使用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'}