【问题标题】:Loading JSON file in Python throwing an error.在 Python 中加载 JSON 文件会引发错误。
【发布时间】:2015-12-24 12:40:09
【问题描述】:

我正在从以下网址获取 API:http://api.example.com/search/foo/bar

使用这个简单的代码。

import json
url = "http://api.example.com/search/foo/bar"
result = json.loads(url)  # result is now a dict
print result['name']

但是,我收到了这个错误。

Traceback (most recent call last):
  File "index.py", line 6, in <module>
    result = json.loads(url);
  File "/usr/lib64/python2.7/json/__init__.py", line 338, in loads
    return _default_decoder.decode(s)
  File "/usr/lib64/python2.7/json/decoder.py", line 365, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib64/python2.7/json/decoder.py", line 383, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded

【问题讨论】:

  • "http://api.example.com/search/foo/bar" 是一个字符串,你要下载页面吗?
  • @KevinGuan 不,一点也不。这是一个 JSON 响应,不是字符串。
  • @arbi-g11324115 URL 是一个字符串。您必须先下载该页面才能获取其 json 内容。这就是凯文告诉你的。他是对的。

标签: python json


【解决方案1】:

您需要先从 url 读取数据。 json.loads() 从字符串加载 json。但该字符串本质上只是字符串形式的 json 结构。您需要通过从该 url 请求中读取数据来获取该 json 字符串,该数据应该是 json 字符串。

例如,像这样的:

import json
import urllib2
url = "http://api.example.com/search/foo/bar"
response = urllib2.urlopen(url)
json_string = response.read()

json_string 现在包含您寻找的 json,假设 api 调用正确返回它。

json_dict = json.loads(json_string)

您应该能够使用 json_dict['name'] 等访问 json 中的项目。

json.loads() 从字符串加载 json,这就是上面所做的(以及为什么我使用 read() 来获取字符串)。 json.load() 从 json 对象加载。如果 api 如您在 cmets 中提到的那样返回纯 json 格式,您可以试试这个:

response = urllib2.urlopen(url)
json_dict = json.load(response)

【讨论】:

  • 感谢您的回答。我是新手,大部分内容我都不懂。为什么需要urllib2 库?返回的数据是纯JSON格式的,为什么urllib2urllib2.urlopen(url)甚至html.read都需要是我无法理解的
  • 是的,这就是我问的原因。
  • urllib2.urlopen(url) 在您传递给它的 url 上返回一个类似文件的对象。在这种情况下,需要对该对象调用 read() 以将该文件对象数据作为字符串分配给变量。至于为什么需要这样做,我不完全确定。无论如何,请参阅我的编辑。抱歉,我无法解释原因:s
  • 谢谢。我实际上是在轮询结果并尝试将它们导出到 XML。无论如何,只是将整个 JSON 转储为 XML?
猜你喜欢
  • 2023-02-02
  • 1970-01-01
  • 1970-01-01
  • 2020-07-22
  • 2012-09-04
  • 1970-01-01
  • 2018-05-31
  • 1970-01-01
  • 2022-11-04
相关资源
最近更新 更多