Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用应用程序脚本将嵌套的Json数据解析到Google工作表_Javascript_Json_Google Apps Script_Google Sheets - Fatal编程技术网

Javascript 使用应用程序脚本将嵌套的Json数据解析到Google工作表

Javascript 使用应用程序脚本将嵌套的Json数据解析到Google工作表,javascript,json,google-apps-script,google-sheets,Javascript,Json,Google Apps Script,Google Sheets,我正在尝试将JSON解析为Google表单。除了我发现JSON有需要作为列返回的childitems之外,其他一切都很有魅力 Json示例 { "status": "OK", "items": [ { "order_id": 1290, "date": "2019-12-24", "services": [

我正在尝试将JSON解析为Google表单。除了我发现JSON有需要作为列返回的childitems之外,其他一切都很有魅力

Json示例

{
  "status": "OK",
  "items": [
    {
      "order_id": 1290,
      "date": "2019-12-24",
      "services": [
        {
          "start_at": "08:00",
          "end_at": "09:00",
          "service_id": 121,
          "assistant_id": 0
        }, 
        {
          "start_at": "12:00",
          "end_at": "13:00",
          "service_id": 122,
          "assistant_id": 0
        }
      ],
    }
  ]
}
我需要进入谷歌表单的是

order_id|date       |services.start_at|services.end_at|services.service_id|services.assistant_id|
1290    |2019-12-24 |08:00            |09:00          |121                |0                    |
1290    |2019-12-24 |12:00            |13:00          |122                |0                    |
我尝试过这个方法,但我不知道如果有多个服务在同一个order\u id下,如何获取子项并重复id和date的值

   var response = UrlFetchApp.fetch(url, options);
   var object = JSON.parse(response.getContentText());
   var headers = Object.keys(object.items[0]);
   var values = object.items.map(function(e) {return headers.map(function(f) {return e[f]})});
   values.unshift(headers);
   var sheet = SpreadsheetApp.getActiveSheet();
   sheet.getRange(2, 1, values.length, values[0].length).setValues(values);
我希望这里的任何人都能给我一个线索,因为我已经尝试了好几天没有运气了,我是一个在应用程序脚本中使用JSON和解析东西的noob


祝您度过愉快的一天:)

您可能想创建一个函数,给定一个多级对象,该函数将返回一个扁平的行数组,每个行都有其属性

注意:因为我不知道是否允许ES6语法,所以我使用了更旧、更详细但更兼容的ES5语法(这让我意识到我是多么喜欢ES6及其快捷方式!)

演示
函数构建行(数据){
返回数据.items.reduce(函数(res,item){
var sharedProps={},//项属性
items=[];//服务
//对于每个项目[键,值]对
Object.entries(item).forEach(函数(对){
var key=pair[0],
值=对[1];
//如果值是数组(服务)
if(数组的值实例){
//添加项目,前缀为键(“服务”)
[]推送应用(项目,
值映射(函数(obj){
返回Object.fromEntries(
Object.entries(obj.map)(函数对){
返回[key+'.+pair[0],pair[1]]
})
);
})
);
}否则{
//否则,将其添加为共享属性
sharedProps[键]=值;
}
});
//在添加共享道具之前,将其添加到每个项目(服务)中
返回res.concat(
items.map(功能(项目){
返回Object.assign({},SharedOps,item);
})
);
}, []);
}
//为了演示
var object={“status”:“OK”,“items”:[{“order_id”:1290,“date”:“2019-12-24”,“services”:[{“start_at”:“08:00”,“end_at”:“09:00”,“service_id”:121,“assistant_id”:0},{“start_at”:“12:00”,“end_at”:“13:00”,“service_id”:122,“assistant_id”:0};
//建行
变量行=构建行(对象);
//获取标题
var headers=Object.keys(行[0]);
//获取值
var values=rows.map(函数(行){
返回headers.map(函数(header){
返回行[标题];
});
});
//执行需要执行的操作以将其插入到工作表中,
//这只是为了演示:
result.innerHTML=headers.join('\t')+'\n'
+values.map(函数(行){
返回row.join('\t\t');
}).join('\n')

我认为您的“Json示例”示例值中可能存在错误。能否再次确认
服务的属性
?为了简单起见,我刚刚编辑了json,但弄错了。感谢您的回复和更新。我注意到已经发布了一个答案。在这种情况下,我要尊重现有的答案。我想这会解决你的问题。谢谢你,果然如期而至。扁平化结果是解决这一问题的关键。祝你有美好的一天。