我正在使用scrapy来抓取和抓取一些页面。我从json响应中提取一些项目时遇到了一些问题。响应如下:
json
([
{
"id":"8589098",
"sid":"3716027243",
"..."
}
])
当我尝试将此响应加载为json
时json.loads(response.body_as_unicode())
它以
失败ValueError: No JSON object could be decoded
Simplejson告诉我:
JSONDecodeError: Expecting value: line 1 column 1 (char 0)
我认为问题是,在json部分前面,json这个词代表。我该怎么做才能解决这个问题?我试图削减回应,但我没有运气。
感谢您的帮助!
祝你好运, 儒略
答案 0 :(得分:1)
试试这个,
In [1]: a = 'json([{"id":"8589098", "sid":"3716027243"}])'
In [2]: t = a.strip('json(').strip(')')
In [3]: json.loads(t)
Out[3]: [{u'id': u'8589098', u'sid': u'3716027243'}]
答案 1 :(得分:1)
你可以使用re
提取大多数外部括号内的所有内容,并丢弃任何外部内容,因此它适用于其他变体:
In [1]: text = 'json([{"id":"8589098", "sid":"3716027243"}])'
In [2]: json.loads(re.search('{.*}', text).group())
Out[2]: {u'id': u'8589098', u'sid': u'3716027243'}