无法将 JSON 数据的值设置为分隔单元格
Cannot Set Value of JSON Data to Separate Cells
我编写了以下脚本,它可以很好地提取所有数据。但是当我尝试将它分解成不同的单元格时,它 returns 什么都没有。我在这里错过了什么?
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 成为 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);
它完成了它的执行,但 returns 什么也没有。有什么想法吗?
我测试了您的示例数据,它按预期返回到单独的单元格。但是你能试试这个方法吗?
代码:
Object.keys(d).forEach(function (key, index){
sh1.getRange(1, index + 1).setValue(d[key]);
});
行为:
- 迭代 object d 的所有键并放置在第一行(每个单元格 1 个值,类似于每个单元格中的个人
setValue
所做的)
输出:
编辑:
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,并将循环所有结果(如果返回了多个数据)
代码:
// header
sh.getRange(1, 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]);
});
});
输出:
我编写了以下脚本,它可以很好地提取所有数据。但是当我尝试将它分解成不同的单元格时,它 returns 什么都没有。我在这里错过了什么?
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 成为 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);
它完成了它的执行,但 returns 什么也没有。有什么想法吗?
我测试了您的示例数据,它按预期返回到单独的单元格。但是你能试试这个方法吗?
代码:
Object.keys(d).forEach(function (key, index){
sh1.getRange(1, index + 1).setValue(d[key]);
});
行为:
- 迭代 object d 的所有键并放置在第一行(每个单元格 1 个值,类似于每个单元格中的个人
setValue
所做的)
输出:
编辑:
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,并将循环所有结果(如果返回了多个数据)
代码:
// header
sh.getRange(1, 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]);
});
});