Как написать этот JSON-возврат из API на листе Google с помощью сценария Google - PullRequest
0 голосов
/ 23 января 2019

Я вызываю API и получаю этот JSON обратно:

var fact={"columns":["Emerging Markets Sovereing Debt","Emerging Markets Corporate Bonds","US REITs","US Leveraged Loans","AC World Equity","Private Equity","US Long Treasuries","US Large Cap","US Cash","Euro area Large Cap","Emerging Markets Equity","UK Large Cap","Emerging Markets Local Currency Debt","Japanese Equity","Commodities","Diversified Hedge Funds","World Government Bonds hedged","TIPS","US Aggregate Bonds","US High Yield Bonds","US Inv Grade Corporate Bonds"]}

Затем я анализирую это, используя следующий код:

var fact = JSON.parse(fact)

Затем я хотел написать каждую строку водна конкретная ячейка листа Google:

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheer()
var col = JSON.stringify(fact.columns).split(",")
sheet.getRange(8, 2, col.length, col[0].length).setValues(col);

, однако это не работает.Я получаю массив очень странного размера. Он размером 34х21, где я ожидал, что он будет 1х21.

1 Ответ

0 голосов
/ 23 января 2019

Есть несколько проблем с вашим кодом.

Сначала API, на который вы ссылаетесь, вернет строку JSON, которая должна вызвать JSON.Parse(), чтобы превратить его в объект JavaScript, чтобы вы могли получить доступ к его содержимому.Но определение переменной fact создает объект JavaScript, поэтому передача объекта в JSON.parse(), который превращает строки JSON в объекты JavaScript, не имеет смысла.

Так что это позволяет вырезать кучу кода.

Вторая важная проблема заключается в том, что для вызова setValues() требуется массив.Но fact_object.columns нужна [] запись в массиве.

И наконец: fact.columns[0] - это просто длина первой строки в массиве.Смотрите решение о том, как использовать аргумент 4 getRange().

function write_json() {

  var fact_object={"columns":["Emerging Markets Sovereing Debt","Emerging Markets Corporate Bonds","US REITs","US Leveraged Loans","AC World Equity","Private Equity","US Long Treasuries","US Large Cap","US Cash","Euro area Large Cap","Emerging Markets Equity","UK Large Cap","Emerging Markets Local Currency Debt","Japanese Equity","Commodities","Diversified Hedge Funds","World Government Bonds hedged","TIPS","US Aggregate Bonds","US High Yield Bonds","US Inv Grade Corporate Bonds"]}
  Logger.log("fact_object is of type: %s",typeof(fact_object));

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  // getRange(row, column, numRows, numColumns)
  sheet.getRange(8, 2, 1, fact_object.columns.length).setValues([fact_object.columns]);

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