如何解决使用fetchurl和json数据具有数组对象,将输出数组作为分隔字符串
我有一个脚本,使用fetch(URL)
将json解析为Google表格
here
通过@Tanaike,脚本运行良好,除非json数据为数组
例如
"elements": [
{
"Id": 49645,"Type": "Person","Label": "Sally Yager","First Name": "Sally","Last Name": "Yager","Description": "","Segment": "555","Image": null,"Project Name": "test222","Initial Date": "09/29/2020 17:44","Last Date": "09/29/2020 17:47","Issues CheckBox": [
"Option 1","Option 6"
],"IssuesRadio": "Option 3","Notes": "222"
}
因此,在此示例中,"Issues CheckBox"
是字符串值的数组
当数组位于json数据中时,脚本的输出将用于:
1)。空数组
"Issues CheckBox": ""
输出为空单元格值
2)。数组中的单个对象:
"Issues CheckBox": [
"Option 1"
]
输出是对象,因此单元格值为Option 1
3)。数组中有多个对象:输出为空单元格值
"Issues CheckBox": [
"Option 1","Option 2","Option 3",.,"Option n"
]
输出为空单元格值
我需要单元格值是数组对象的管道分隔字符串
Option 1|Option 2|Option 3| ....|Option n
谢谢
// =GETCONNECTIONS("https://sum-app.net/projects/14312620200623668/download_data/kumu_json")
function GETCONNECTIONS(url) {
var response = UrlFetchApp.fetch(url);
var responseText = response.getContentText();
var responseJson = JSON.parse(responseText);
var connectionKeys = Object.keys(responseJson.connections[0]);
// At JSON object,the order of keys are not guaranteed. So the following array including the keys might be suitable.
// var connectionKeys = ["Id","From","To","Name From","Name To","Initial Date","Last Date","Type","Weight","CheckBox ZZZ","Text Area","Radio AAA","Select bbb"];
var data = responseJson.connections.map(e => connectionKeys.map(f => e[f]));
data.unshift(connectionKeys);
return data;
}
// =GETELEMENTS("https://sum-app.net/projects/14312620200623668/download_data/kumu_json")
function GETELEMENTS(url) {
var response = UrlFetchApp.fetch(url);
var responseText = response.getContentText();
var responseJson = JSON.parse(responseText);
var elementKeys = Object.keys(responseJson.elements[0]);
// At JSON object,the order of keys are not guaranteed. So the following array including the keys might be suitable.
// var elementKeys = ["Id","Label","First Name","Last Name","Description","Segment","Image","Project Name","Issues CheckBox","IssuesRadio","Notes"];
var data = responseJson.elements.map(e => elementKeys.map(f => e[f]));
data.unshift(elementKeys);
return data;
}
解决方法
您好,我想举一个例子,您可以继续前进。您需要先执行此操作,然后再将其写入工作表。
let api =
{
"Id": 49645,"Type": "Person","Label": "Sally Yager","First Name": "Sally","Last Name": "Yager","Description": "","Segment": "555","Image": null,"Project Name": "test222","Initial Date": "09/29/2020 17:44","Last Date": "09/29/2020 17:47","Issues Checkbox": [
"Option 1","Option 6"
],"IssuesRadio": "Option 3","Notes": "222"
};
const checkboxes = api["Issues Checkbox"];
const arr = [];
const array = checkboxes.forEach(box => {
arr.push(box);
})
api["Issues Checkbox"] = arr.join(" | ");
console.log(api);
,
“问题复选框”中的数组不能作为数组传递。一种将它们作为一串由逗号分隔的元素传递的选项。一种方法是使用join
。
var responseJson = {
"elements": [{
"Id": 49645,"Issues Checkbox": [
"Option 1","Option 6"
],"Notes": "222"
}]
}
var elementKeys = Object.keys(responseJson.elements[0]);
var data = responseJson.elements.map(e => elementKeys.map(f => {
return e[f] instanceof Array ? e[f].join(',') : e[f];
}));
data.unshift(elementKeys);
console.log(data)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。