как я могу l oop через строку unciode json в javascript? - PullRequest
1 голос
/ 11 января 2020

Я получаю следующую строку, возвращаемую API параметров CBOE:

{u'inputs': {u'stock_price_max': 50.0, u'high_low_stock_max': None, u'time_frame': u'middle', u'hv30_max': None, u'high_low_stock_min': None, u'symbols': None, u'hv30_min': None, u'low_strike': 3.0, u'high_strike': 4.0, u'industry_codes': None, u'spread_ask_price_max': None, u'stock_price_min': 10.0}, u'output': [{u'stock_price': 43.2, u'stock_hi_lo_percent': 72.9651, u'symbol': u'EWZ', u'industry_code': 55501010, u'max_gain': 0.52, u'high_strike_otm_percent': 0.463, u'low_strike_otm_percent': 2.7778, u'spread_ask': 0.48, u'spread': u'43/42 Put', u'expiry': u'2019-04-18', u'max_gain_to_spread_ask_percent': 108.3333, u'hv30': 27.3836}, {u'stock_price': 41.37, u'stock_hi_lo_percent': 21.7957, u'symbol': u'FXI', u'industry_code': 55501010, u'max_gain': 0.26, u'high_strike_otm_percent': 0.8944, u'low_strike_otm_percent': 2.103, u'spread_ask': 0.24, u'spread': u'41/40.5 Put', u'expiry': u'2019-05-17', u'max_gain_to_spread_ask_percent': 108.3333, u'hv30': 20.2925}

Я хочу провести через нее l oop и поместить элементы в ячейки электронной таблицы Google. У меня есть этот код:

function myFunction() {
  var response = UrlFetchApp.fetch(endpoint);
  var data = response.getContentText();
  sheet.getRange("A8").setValue(data);
}

Это помещает всю строку в ячейку A8.

Я попытался l oop через строку с

for (i = 0; i < jsonlen; i++) {
    sheet.getRange("A:A").setValaue(data['output']['symbol']);
}

Это возвращает "неопределенный". Итак, проблемы: 1) как извлечь нужные элементы из «выходной» части строки 2) поместить символы в A3, A4 и c, затем stock_price в B3, B4 и т.д. 3) как определить длину строки, чтобы l oop работал правильно, пока строка не была полностью зациклена?

Большое спасибо!

1 Ответ

1 голос
/ 12 января 2020
  • Вы хотите получить значения symbol и stock_price свойства output и хотите поместить их в столбцы «A» и «B» активной электронной таблицы соответственно.
  • Вы хотите поместить значения из строки 3.
  • Вы хотите добиться этого с помощью Google Apps Script.

Если мое понимание верно, как насчет этого ответа ? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

Точки модификации:

  • свойство output имеет массив. И symbol и stock_price находятся в массиве.
    • Итак, сначала необходимо подготовить значения для размещения в электронной таблице.

Модифицированный скрипт:

function myFunction() {
  var response = UrlFetchApp.fetch(endpoint);
  var data = JSON.parse(response.getContentText());

  var values = data.output.map(function(e) {return [e.symbol, e.stock_price]});
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.getRange(3, 1, values.length, values[0].length).setValues(values);
}
  • В этом случае значения помещаются в строку 3 столбца «A» и «B» на активном листе.

Примечание:

  • В вашем В случае, если data на самом деле является строковым значением {u'inputs': {###}, u'outputs': [###]}, которое имеет литерал Unicode python 2, u необходимо заменить. Поэтому в этом случае, пожалуйста, поставьте data = JSON.parse(data.replace(/u\'|\'/g, "\"").replace(/None/g, "null")); перед var values = data.output.map(function(e) {return [e.symbol, e.stock_price]});. Пожалуйста, будьте осторожны.

Ссылки:

Если я неправильно понял ваш вопрос и это не тот результат, который вам нужен, я приношу свои извинения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...