我从局域网连接中抓取了一个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
非常感谢任何帮助
我应该提到我正在寻找正则表达式或解决方法......
答案 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。你有一些混淆与逃避:
\\"
:第一个反斜杠是Python字符串的转义,第二个是转义JSON字符串文字。\n
,因此在Python字符串中它们应该写成\\n
。<\/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'}