2016-11-01 95 views
0

我試圖從YQL解析JSON格式的數據,但它不會工作。具體來說,我得到以下輸出:Python的JSON解析從API

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工作,但這是針對我在學校所做的研究。 我也看過類似的其他問題,但這些是從.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']) 

回答

3

你要獲取數據,然後才能對其進行解碼。嘗試使用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) 
1
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) 
0

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()來解析它。