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 文字列のエスケープで、2 番目のバックスラッシュは JSON 文字列リテラルのエスケープです。
  2. JSON 文字列リテラルにリテラル改行を含めることはできません。と書く必要が\nあるため、Python 文字列では と書く必要があります\\n
  3. (確かではありません)スラッシュをエスケープする必要はありませんか、それとも<\/span>実際に望ましい結果ですか?

r""" """(注:文字列リテラルを使用すると、1 レベルのエスケープを取り除くことができます。)

これらの変更後、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 に答える