无法将 JSON 数据的值设置为单独的单元格 代码:行为:输出:编辑:注意:编辑 2:代码:输出:

问题描述

我编写了以下脚本,它可以很好地提取所有数据。但是当我尝试将它分解成不同的单元格时,它什么也不返回。我在这里错过了什么?

function myMonitor() {
//GET KEY

var sh=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“NINFO”);
**var rowNum = sh.getRange(‘F6’).getValue(); **

//POST CALL

** var url = “http://monitor.incognito.org/pubkeystat/stat”; **
** var data = { “mpk”: rowNum**
** };**

** var options = {**
** ‘method’ : ‘post’,**
** ‘contentType’: ‘application/json’,**
** ‘payload’ : JSON.stringify(data)**
** };**

** var response = UrlFetchApp.fetch(url,options);**
** var txt= response.getContentText();**
** var d=JSON.parse(txt);**

//RETURN RESULTS BACK TO GOOGLE SHEET

var sh1=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“MONITOR”);

sh1.getRange(1,1).setValue(d);
}

结果:

{Role=PENDING,SyncState=SHARD SYNCING,Alert=true,CommitteeChain=2,NextEventMsg=12 to be COMMITEE,Status=ONLINE}

现在,如果我尝试同样的事情,并将最后一行切换为:

sh1.getRange(1,1).setValue(d.Role);
sh1.getRange(1,2).setValue(d.SyncState);
sh1.getRange(1,3).setValue(d.Alert);
sh1.getRange(1,4).setValue(d.CommitteeChain);
sh1.getRange(1,5).setValue(d.NextEventMsg);
sh1.getRange(1,6).setValue(d.Status);

它完成了它的执行但什么都不返回。有什么想法吗?

解决方法

我测试了您的样本数据,它按预期返回到单独的单元格。但是你能试试这个方法吗?

代码:

Object.keys(d).forEach(function (key,index){
  sh1.getRange(1,index + 1).setValue(d[key]);
});

行为:

  • 迭代对象 d 的所有键并放置在第一行(每个单元格 1 个值,类似于每个单元格中您的个人 setValue 所做的)

输出:

output

编辑:

  • d 值似乎在数组中。试试这个:
d.forEach(function (data,row){
  Logger.log(data);
  Object.keys(data).forEach(function (key,index){
    Logger.log(key)
    sh.getRange(row + 1,index + 1).setValue(data[key]);
  });
});

注意:

  • 由于我无法在 fetch 方法上测试实际响应,为了模拟您的数据,我使用了:

    var d = {Role:"PENDING",SyncState:"SHARD SYNCING",Alert:true,CommitteeChain:2,NextEventMsg:"12 to be COMMITEE",Status:"ONLINE"};

  • 如果您的 d 值为:

    ,上面的代码应该可以工作

    {Role=PENDING,SyncState=SHARD SYNCING,Alert=true,CommitteeChain=2,NextEventMsg=12 to be COMMITEE,Status=ONLINE}

编辑 2:

  • 由于您的响应在一个数组中,您需要像 d[0] 一样访问它
  • 下面提供的代码还将添加一个标题,并将循环所有结果(如果有多个数据返回)

代码:

// header
sh.getRange(1,1,Object.keys(d[0]).length).setValues([Object.keys(d[0])]);
// contents
d.forEach(function (data,row){
  Object.keys(data).forEach(function (key,index){
    sh.getRange(row + 2,index + 1).setValue(data[key]);
  });
});

输出:

output