0

私はJavascriptとJQueryに非常に慣れていないので、yahooの財務データを取得して操作するさまざまな方法を試し、jqueryを決定しました。私の最初の基本的な試みはこれでした:

$.getJSON("http://query.yahooapis.com/v1/public/yql?q=select%20Name%2C%20LastTradePriceOnly%20from%20yahoo.finance.quotes%20where%20symbol%20in%20%28%22RHT%22%29&format=json&env=http%3A%2F%2Fdatatables.org%2Falltables.env" + "?callback=?", function(json) {

var lastprice = json[0].results.quote.LastTradePriceOnly

console.log(lastprice)

それは機能せず、エラーコンソールは役に立ちませんでした。ここで検索して、この質問を見つけました 。jsonを変数にロードし、yahooから応答がまだ受信されていない可能性があると考えてこれを試しました。

var json = (function () {
    var json = null;
    $.ajax({
        'async': false,
        'global': false,
        'url': "http://query.yahooapis.com/v1/public/yql?q=select%20Name%2C%20LastTradePriceOnly%20from%20yahoo.finance.quotes%20where%20symbol%20in%20%28%22RHT%22%29&format=json&env=http%3A%2F%2Fdatatables.org%2Falltables.env",
        'dataType': "json",
        'success': function (data) {
            json = data;
        }
    });
    return json;
})(); 

    var lastprice = json.results.quote.LastTradePriceOnly

    console.log(lastprice)

});

これも正しくありませんでした。近くにいるような気がします。どんな助けでも大歓迎です

4

2 に答える 2

2

URL のコールバックを削除すると、配列ではなくオブジェクトである次の JSON 結果がクエリから取得されます。

{
   "query":{
      "count":1,
      "created":"2012-10-26T19:00:18Z",
      "lang":"en-US",
      "results":{
         "quote":{
            "LastTradePriceOnly":"50.26",
            "Name":"Red Hat, Inc. Com"
         }
      }
   }
}

次の方法でそのデータにアクセスする必要があります。

var lastprice = json.query.results.quote.LastTradePriceOnly;

変更されたコードの動作デモは次のとおりです: DEMO


編集 (警告)

その呼び出しをテストしていたところ、同じ URL を持つそのサービスからの結果が次のエラーを返す場合があることがわかりました。

{
   "error":{
      "lang":"en-US",
      "description":"No definition found for Table yahoo.finance.quotes"
   }
}
于 2012-10-26T19:02:29.283 に答える
0

データは次の形式で返されます。

{"query":
       {"count":1,"created":"2012-10-26T19:00:42Z","lang":"en-US","results":
          {"quote":
              {"LastTradePriceOnly":"50.28","Name":"Red Hat, Inc. Com"}}}}

したがって、返されるオブジェクトをトラバースする必要があります: data.query.results.quote.LastTradePriceOnly

>     $.ajax({
>         'async': false,
>         'global': false,
>         'url': "http://query.yahooapis.com/v1/public/yql?q=select%20Name%2C%20LastTradePriceOnly%20from%20yahoo.finance.quotes%20where%20symbol%20in%20%28%22RHT%22%29&format=json&env=http%3A%2F%2Fdatatables.org%2Falltables.env&callback=?",
>         'dataType': "json",
>         'success': function (data) {
>             alert(data.query.results.quote.LastTradePriceOnly);
>         }
>     });

これを示すjsfiddleは次のとおりです。 http://jsfiddle.net/erick382/Qghtu/

于 2012-10-26T19:05:33.897 に答える