Python JSON 从 API 解析

Python JSON Parsing from API

我正在尝试从 YQL 中解析 JSON 格式的数据,但它不起作用。具体来说,我得到以下输出:

 File "C:\Python34\lib\json\__init__.py", line 318, in loads
    return _default_decoder.decode(s)
 File "C:\Python34\lib\json\decoder.py", line 343, in decode
    obj, end = self.raw_decode(s, idx=_w(s,0).end())
 File "C:\Python34\lib\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 做任何事情。我主要使用 C++ 和 VBA,但这是为了我在学校所做的研究。 我还查看了其他与 SO 类似的问题,但这些问题是从 .txt 文件中解析的,而不是直接从互联网上解析的。 任何人都可以提供的任何见解将不胜感激——谢谢!

这是我的代码:

import json
result = json.loads('http://query.yahooapis.com/v1/public/yql?q=select%20Ask%20from%20yahoo.finance.quotes%20where%20symbol%20IN%20(%22CL=F%22)&format=json&env=http://datatables.org/alltables.env')  # result is now a dict
print (result['Ask'])

您必须先获取数据,然后才能对其进行解码。尝试使用 requests 模块来获取数据。

import requests

url = 'http://query.yahooapis.com/v1/public/yql'
params = {
    'q': 'select Ask from yahoo.finance.quotes where symbol IN ("CL=F")',
    'format': 'json',
    'env': 'http://datatables.org/alltables.env'
}

response = requests.get(url, params=params)
data = response.json()
print (data)
import json, requests

url = 'http://query.yahooapis.com/v1/public/yql?q=select%20Ask%20from%20yahoo.finance.quotes%20where%20symbol%20IN%20(%22CL=F%22)&format=json&env=http://datatables.org/alltables.env'


resp = requests.get(url=url)
data = json.loads(resp.text)

json.loads 将传递的字符串转换为 dict 对象。它 不会 进行 URL 调用然后解析结果。

您需要使用 urllib2

>>> import urllib2
>>> content = urllib2.urlopen(some_url).read()
>>> print json.loads(content)

requests图书馆

>>> r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
>>> print r.json()

urllib2requests 将通过向 URL 发送请求来获取 JSON 数据。收到数据后,您可以使用 json.loads() 解析它。