微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用fetchurl和json数据具有数组对象,将输出数组作为分隔字符串

如何解决使用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 举报,一经查实,本站将立刻删除。