2015-12-09 29 views
2

JSON有点新...有谁知道如何正确地遍历并获取符号并更改例如?我试过在json.loads中使用字符串来包装所有东西,但是我一直收到关于元组的错误。仅供参考,我在字符串内部使用ticker,但为了方便任何人试图运行相同的代码,我将其更改为YHOO。无法解析雅虎财经API JSON数据?包含代码(Python Flask)

from flask import Flask 
from flask.ext.compress import Compress 
from flask import render_template 
from httplib2 import Http 
import json 

http = Http() 
app = Flask(__name__) 
Compress(app) 
app.config['DEBUG'] = True 
app.config['TESTING'] = True 


@app.route('/<ticker>', methods=['GET']) 
def check(ticker): 
    yahoo_api = http.request("http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20IN%20(%22YHOO%22)&format=json&env=http://datatables.org/alltables.env") 
    return yahoo_api[1] 

if __name__ == '__main__': 
    app.run() 

回答

3

yahoo_api[1]是一个字符串,使用json.loads得到JSON。

import json 

from httplib2 import Http 

yahoo_api = Http().request('http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20IN%20(%22YHOO%22)&format=json&env=http://datatables.org/alltables.env') 
yahoo_json = json.loads(yahoo_api[1]) 
change = yahoo_json['query']['results']['quote']['Change'] 
symbol = yahoo_json['query']['results']['quote']['symbol'] 

Anthoer方法是使用requests,没有关于json的担心,这是ESAY使用。

import requests 
r = requests.get('http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20IN%20%28%22YHOO%22%29&format=json&env=http://datatables.org/alltables.env') 
change = r.json()['query']['results']['quote']['Change'] 
symbol = r.json()['query']['results']['quote']['symbol'] 
+0

谢谢!这就是它! –

0

我想你可能忘记把元组(内容)的第二部分,尽管这似乎不太可能为你做的return语句做到这一点。或者你忘了UTF-8解码?

import json 
import pprint 
from httplib2 import Http 

http = Http() 

url = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20IN%20(%22YHOO%22)&format=json&env=http://datatables.org/alltables.env" 
yahoo_api = http.request(url) 
result = json.loads(yahoo_api[1].decode('utf-8')) 
pprint.pprint(result) 
+0

感谢您的回应!获得yahoo_api [1]工作正常,我想知道的是如何专门返回“符号”。我试过yahoo_api [1] ['query] ['results'] ['symbol'],但它会引发错误。以下是发送获取请求时返回的json的片段:{ “query”:{ “count”:1, “created”:“2015-12-09T23:38:56Z”, “lang” : “EN-US”, “成果”:{ “报价”:{ “符号”: “AAPL”, “问”: “115.74”, “AverageDailyVolume”: “46976200”, –

+0

类型错误:字符串索引必须是整数,而不是str // Werkzeug调试器 –