python api 无法使用 Json.load() 加载 Str
python api Can't load Str with Json.load()
我刚开始在 python 中学习 json 并开始练习从网站上获取比特币价格;但是,我不断收到此错误:
''Exception Value: Expecting value: line 1 column 1 (char 0)''
当我打印 source 时,它在字符串的前面显示 b'。在网上浏览后,我认为这是关于字节和 str 东西的问题(也从在线网站检查 json 格式确实是正确的)。我的代码如下:
import json
import urllib.request
url = 'http://www.quandl.com/api/v3/datasets/BCHARTS/BITSTAMPUSD'
with urllib.request.urlopen(url) as response:
source = response.read().decode('utf-8')
data = json.loads(source)
目前,我切换到
data = requests.get(url).json()
并且运行顺利,但我仍然希望修复上述错误。
提前致谢!
您收到此错误是因为响应采用 HTML 格式。不是 JSON 格式。
你可以把source
变量打印出来看看。
实际 JSON 在 <code>
标签内:
<html class="gr__quandl_com"><head>
<head>...</head>
<body>
<pre>
<code>
{...} #Here is the actual JSON.
</code>
</pre>
</body>
您可以使用 beautifulsoup 等库来解析 HTML 并在创建 JSON object.
之前提取 JSON
或者,您可以要求服务器以 [=29=] 格式发送响应,方法是在发出请求时添加以下 header:
request.add_header('Accept', 'application/json')
您收到错误消息,因为服务器的响应是正常的 HTML 并且您要查找的数据位于 <pre>
标记内。您必须在提出请求时提取 <pre>
标记的内容或包含适当的 headers。
From quandl API docs
Change Formats
You can get the same data in JSON format:
https://www.quandl.com/api/v3/datasets/OPEC/ORB.json
Or in XML:
https://www.quandl.com/api/v3/datasets/OPEC/ORB.xml
所以你的情况是:
url = 'http://www.quandl.com/api/v3/datasets/BCHARTS/BITSTAMPUSD.json'
您需要告诉服务器,您想要 JSON 格式的响应。目前你得到 HTML.
import json
import urllib.request
url = 'http://www.quandl.com/api/v3/datasets/BCHARTS/BITSTAMPUSD'
request = urllib.request.Request(url)
request.add_header('Accept', 'application/json')
with urllib.request.urlopen(request) as response:
source = response.read().decode('utf-8')
data = json.loads(source)
我刚开始在 python 中学习 json 并开始练习从网站上获取比特币价格;但是,我不断收到此错误:
''Exception Value: Expecting value: line 1 column 1 (char 0)''
当我打印 source 时,它在字符串的前面显示 b'。在网上浏览后,我认为这是关于字节和 str 东西的问题(也从在线网站检查 json 格式确实是正确的)。我的代码如下:
import json
import urllib.request
url = 'http://www.quandl.com/api/v3/datasets/BCHARTS/BITSTAMPUSD'
with urllib.request.urlopen(url) as response:
source = response.read().decode('utf-8')
data = json.loads(source)
目前,我切换到
data = requests.get(url).json()
并且运行顺利,但我仍然希望修复上述错误。 提前致谢!
您收到此错误是因为响应采用 HTML 格式。不是 JSON 格式。
你可以把source
变量打印出来看看。
实际 JSON 在 <code>
标签内:
<html class="gr__quandl_com"><head>
<head>...</head>
<body>
<pre>
<code>
{...} #Here is the actual JSON.
</code>
</pre>
</body>
您可以使用 beautifulsoup 等库来解析 HTML 并在创建 JSON object.
之前提取 JSON或者,您可以要求服务器以 [=29=] 格式发送响应,方法是在发出请求时添加以下 header:
request.add_header('Accept', 'application/json')
您收到错误消息,因为服务器的响应是正常的 HTML 并且您要查找的数据位于 <pre>
标记内。您必须在提出请求时提取 <pre>
标记的内容或包含适当的 headers。
From quandl API docs
Change Formats You can get the same data in JSON format:https://www.quandl.com/api/v3/datasets/OPEC/ORB.json
Or in XML: https://www.quandl.com/api/v3/datasets/OPEC/ORB.xml
所以你的情况是:
url = 'http://www.quandl.com/api/v3/datasets/BCHARTS/BITSTAMPUSD.json'
您需要告诉服务器,您想要 JSON 格式的响应。目前你得到 HTML.
import json
import urllib.request
url = 'http://www.quandl.com/api/v3/datasets/BCHARTS/BITSTAMPUSD'
request = urllib.request.Request(url)
request.add_header('Accept', 'application/json')
with urllib.request.urlopen(request) as response:
source = response.read().decode('utf-8')
data = json.loads(source)