Сценарий Google Apps анализирует JSON-ответ из API Quandl - не может получить доступ к определенному индексу массива в ответ из-за «неопределенного» - PullRequest
0 голосов
/ 08 ноября 2019

Я относительный новичок в JSON в целом, но у меня есть опыт работы с JSON с помощью инструментов командной строки на основе Linux в Python, как правило, в виде простого текста.

Я пытаюсь реализовать некоторые функции в Сценариях Служб Google. Метод связывается с API Qaundl и получает обратно некоторые данные, и из этих данных я хотел бы вернуть одно конкретное значение (цена «Close») в этом случае.


function CLOSE_PRICE(ticker,date) {
  var options =
      {
        'muteHttpExceptions': true,
        "headers":{"Accept":"application/json"}
      };

  var api_key = "some_api_key"
  ticker = "HD"
  date   = "2017-12-28"
  var url = "https://www.quandl.com/api/v3/datasets/EOD/" + ticker + ".json?start_date=" + date + "&end_date=" + date + "&api_key=" + api_key

  var response = UrlFetchApp.fetch(url,options)
  var json = response.getContentText();
  var datum = JSON.parse(json)
  var end_of_day_prices = datum.dataset.data;
  Logger.log(end_of_day_prices);

  var close = end_of_day_prices[4];
  Logger.log(close);
  return close;
}

Это данные JSON, которые я получаю обратно ... в довольно визуализированном формате для печати.


  "dataset": {
    "id": 42635437,
    "dataset_code": "HD",
    "database_code": "EOD",
    "name": "Home Depot Inc. (The) (HD) Stock Prices, Dividends and Splits",
    "description": "<p><b>Ticker</b>: HD</p>\n<p><b>Exchange</b>: NYSE</p>\n<p>Prices, dividends, splits for Home Depot Inc. (The) (HD).\n\n</p><p>Columns:</p>\n<p>Open, High, Low, Close, Volume are <b>unadjusted</b>.</p>\n<p>Dividend shows the <b>unadjusted</b> dividend on any ex-dividend date else 0.0.</p>\n<p>Split shows any split that occurred on a the given DATE else 1.0</p>\n<p>Adjusted values are adjusted for dividends and splits using the <a href="http://www.crsp.com/products/documentation/crsp-calculations">CRSP methodology</a>.</p>\n<p>Updates of this dataset occur at 5pm ET.  Subsequent corrections from the exchange are applied at 9pm ET.</p>\n<p>Data is sourced from NASDAQ, NYSE and AMEX via <a href="http://www.quotemedia.com">Quotemedia</a>.</p>\n\n",
    "refreshed_at": "2019-11-08 04:01:00 UTC",
    "newest_available_date": "2017-12-28",
    "oldest_available_date": "2013-09-01",
    "column_names": [
      "Date",
      "Open",
      "High",
      "Low",
      "Close",
      "Volume",
      "Dividend",
      "Split",
      "Adj_Open",
      "Adj_High",
      "Adj_Low",
      "Adj_Close",
      "Adj_Volume"
    ],
    "frequency": "daily",
    "type": "Time Series",
    "premium": true,
    "limit": null,
    "transform": null,
    "column_index": null,
    "start_date": "2017-12-28",
    "end_date": "2017-12-28",
    "data": [
      [
        "2017-12-28",
        190.91,
        190.98,
        189.64,
        189.78,
        3175631.0,
        0.0,
        1.0,
        182.95836799845628,
        183.02545241393943,
        181.74126503183305,
        181.8754338627994,
        3175631.0
      ]
    ],
    "collapse": null,
    "order": null,
    "database_id": 12910
  }
}

Я не могу получить доступ к отдельным элементам массива dataset.data и не могу понять, почему. Вот консоль регистрации Google Apps Script, показывающая мои строки журнала.

enter image description here

Я почти уверен, что не понимаю какой-либо аспект скрипта Google Apps или модель данных JSON. Спасибо за помощь.

1 Ответ

0 голосов
/ 08 ноября 2019

Первый комментарий по моему вопросу привел к ответу.

var close = end_of_day_prices[0][4];

Это правильный способ доступа к данным, которые я ищу.

...