【问题标题】:No JSON object could be decoded Python没有 JSON 对象可以被 Python 解码
【发布时间】:2015-01-14 06:12:01
【问题描述】:

我正在尝试从此website 获取一些数据。我可以输入 'text' 和 'longest_only' 参数,但是当我传递 'ontologies' 参数时,它说没有 JSON 对象可以被解码。这是完整的网址

http://data.bioontology.org/annotator?text=lungcancer,boneberries&ontologies=NCIT&longest_only=true 
我正在使用 Python 2.7

【问题讨论】:

  • 您提供的url需要授权才能访问;只能看到401错误码
  • 没有账号就看不到网站的内容。 status": 401, "error": "您必须使用查询字符串参数 apikeyAuthorization 标头提供 API 密钥:Authorization: apikey token=my_apikey。登录bioportal.bioontology.org/account 即可获取您的 API Key
  • 如果您打印 response.status_code,您会看到 500 错误
  • @dazedconfused 我该如何解决?
  • @amy 对不起,我不知道; 500 internal server error 表明网站服务器有问题;如果您尝试打印response.text,您会看到以下消息:“我们很抱歉,出现了问题。我们已收到有关此错误的通知。”

标签: python json post parameters get


【解决方案1】:

参数是ontologies[],因为您可以指定多个。您的请求应该与online search 使用的请求类似:

text=lung+cancer%2Cbone+marrow&ontologies%5B%5D=NCIT&longest_only=true&raw=true

只需在此处执行相同的搜索,然后使用您喜欢的浏览器的开发者工具选项来检查实际发送的有效负载是什么。

【讨论】:

  • 没想到这个,不错的答案!
  • 这真的很有帮助。谢谢!
【解决方案2】:

这不是答案,而是我唯一可以显示执行示例代码时看到的错误的地方。我将代码放在main 的新模块中,并在 Python 3.4 中运行。

import requests

if __name__ == '__main__':
    url = 'http://bioportal.bioontology.org/annotator'
    params = {
        'text': 'lung cancer,bone marrow',
        'ontologies': 'NCIT',
        'longest_only': 'true'
    }

    session = requests.Session()
    session.get(url)

    response = session.post(url, data=params)
    data = response.json()

    # get the annotations
    for annotation in data['annotations']:
        print (annotation['annotatedClass']['prefLabel'])

我收到以下错误。

Traceback (most recent call last):
  File "/Users/.../Sandbox/Ontology.py", line 21, in <module>
    data = response.json()
  File "/Users/erwin/anaconda/lib/python3.4/site-packages/requests/models.py", line 799, in json
    return json.loads(self.text, **kwargs)
  File "/Users/erwin/anaconda/lib/python3.4/json/__init__.py", line 318, in loads
    return _default_decoder.decode(s)
  File "/Users/erwin/anaconda/lib/python3.4/json/decoder.py", line 343, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/Users/erwin/anaconda/lib/python3.4/json/decoder.py", line 361, in raw_decode
    raise ValueError(errmsg("Expecting value", s, err.value)) from None
ValueError: Expecting value: line 1 column 1 (char 0)

【讨论】:

  • 我可以在 Python 2.7 上运行它而不会出现任何错误(直到我在 params 字典中添加本体部分)
猜你喜欢
  • 1970-01-01
  • 2018-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-30
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多