【问题标题】:How to extract items out of a json response within a list and with a word in front of it?如何从列表中的json响应中提取项目并在其前面添加一个单词?
【发布时间】:2015-04-22 09:02:38
【问题描述】:

我正在使用 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这个词代表着。我能做些什么来解决这个问题?我试图减少响应,但我没有运气。

感谢您的帮助!

最好的问候, 朱利安

【问题讨论】:

  • 您必须从响应中删除json( 和最后一个),然后尝试,它会起作用
  • 你为什么用xpath标记这个问题?

标签: jquery json parsing scrapy


【解决方案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'}

【讨论】:

  • 也非常感谢!它对我来说也很完美。现在我必须看看哪个更快;)。
  • @jithin 提供的那个稍微快一些,但是只能处理精确的格式。这个可以处理 JSON 部分之外的任何其他附加字符串。而且我认为无论如何您都不会注意到速度的差异。
  • 谢谢 - 我现在对两者都进行了测试,并没有注意到爬行速度的任何相关差异。非常感谢!
【解决方案2】:

试试这个,

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'}]

【讨论】:

  • 谢谢!非常适合我。
猜你喜欢
  • 1970-01-01
  • 2014-06-25
  • 1970-01-01
  • 2022-07-02
  • 2023-02-13
  • 1970-01-01
  • 1970-01-01
  • 2016-11-22
  • 1970-01-01
相关资源
最近更新 更多