将mulitlevel json应用于端点响应

发布于 2025-02-13 06:15:09 字数 1999 浏览 2 评论 0原文

我在Google表上将以下代码部署为Web应用程序,

function doGet(e){
  var ss = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/sskey/edit#gid=0");
  var sheet = ss.getSheetByName("TV_Series");
  return getData(sheet); 
}

function getData(sheet){
  var jo = {};
  var dataArray = [];
  var rows = sheet.getRange(2,1,sheet.getLastRow()-1, sheet.getLastColumn()).getValues();
  Logger.log("rows = "+rows);
  
  for(var i = 0, l= rows.length; i<l ; i++){
    var dataRow = rows[i];
    Logger.log("i ="+i);
    Logger.log("dataRoes = " +dataRow);
    var record = {};
    record['series_name'] = dataRow[0];
    record['season_name'] = dataRow[1];
    record["season_number"] = dataRow[2];
    record["episode_name"] = dataRow[3];
    record["episode_number"] = dataRow[4];
    record["media_url"] = dataRow[8];
    dataArray.push(record);    
  }  
  
  jo.series = dataArray;
  var result = JSON.stringify(jo);
  return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.JSON);
}

因此Web应用程序URL返回以下JSON:

{"series":
[{"series_name":"Dance Academy","season_name":"season 3","season_number":"3","episode_name":"Glue","episode_number":"1","media_url":"https://someurl.net/path"},
{"series_name":"Dance Academy","season_name":"season 3","season_number":"3","episode_name":"New Rules","episode_number":"2","media_url":"https://someurl.net/path"}]}

我想将系列,季节和情节分开,以与JSON文件中的不同对象分开。所以我会得到这样的东西:

{
 "series":{"name": "Dance Academy",
  "seasons":
   [{"name":"season 1","season_number":1,"episodes":
    [{"name":"episode 1","episode_number":1,"url":"https://someurl.net/path"},
     {"name":"episode 2","episode_number":2,"url":"https://someurl.net/path"}]},
    {"name": "season 2", "season_number":2,"episodes":
    [{"name":"episode 1","episode_number":1,"url":"https://someurl.net/path"},
     {"name":"episode 2","episode_number":2,"url":"https://someurl.net/path"}]}]}}

我该怎么做? 谢谢

I have the following code deployed as web app on google sheets

function doGet(e){
  var ss = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/sskey/edit#gid=0");
  var sheet = ss.getSheetByName("TV_Series");
  return getData(sheet); 
}

function getData(sheet){
  var jo = {};
  var dataArray = [];
  var rows = sheet.getRange(2,1,sheet.getLastRow()-1, sheet.getLastColumn()).getValues();
  Logger.log("rows = "+rows);
  
  for(var i = 0, l= rows.length; i<l ; i++){
    var dataRow = rows[i];
    Logger.log("i ="+i);
    Logger.log("dataRoes = " +dataRow);
    var record = {};
    record['series_name'] = dataRow[0];
    record['season_name'] = dataRow[1];
    record["season_number"] = dataRow[2];
    record["episode_name"] = dataRow[3];
    record["episode_number"] = dataRow[4];
    record["media_url"] = dataRow[8];
    dataArray.push(record);    
  }  
  
  jo.series = dataArray;
  var result = JSON.stringify(jo);
  return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.JSON);
}

So the web app url returns the following JSON:

{"series":
[{"series_name":"Dance Academy","season_name":"season 3","season_number":"3","episode_name":"Glue","episode_number":"1","media_url":"https://someurl.net/path"},
{"series_name":"Dance Academy","season_name":"season 3","season_number":"3","episode_name":"New Rules","episode_number":"2","media_url":"https://someurl.net/path"}]}

i would like to separate series, seasons, and episodes to different objects in the JSON file. So i will get something like that:

{
 "series":{"name": "Dance Academy",
  "seasons":
   [{"name":"season 1","season_number":1,"episodes":
    [{"name":"episode 1","episode_number":1,"url":"https://someurl.net/path"},
     {"name":"episode 2","episode_number":2,"url":"https://someurl.net/path"}]},
    {"name": "season 2", "season_number":2,"episodes":
    [{"name":"episode 1","episode_number":1,"url":"https://someurl.net/path"},
     {"name":"episode 2","episode_number":2,"url":"https://someurl.net/path"}]}]}}

How do i do that?
thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

独闯女儿国 2025-02-20 06:15:10

描述

这是假设只有一个“系列”。这是一个从示例JSON构建多级对象的示例脚本。您必须在任何循环外构建第一个对象,以便您可以与循环内部进行一些比较。

code.gs

function testJson() {
  try {
    let json = {"series":
[{"series_name":"Dance Academy","season_name":"season 3","season_number":"3","episode_name":"Glue","episode_number":"1","media_url":"https://someurl.net/path"},
{"series_name":"Dance Academy","season_name":"season 3","season_number":"3","episode_name":"New Rules","episode_number":"2","media_url":"https://someurl.net/path"}]};
    let result = {};
    let series = json.series[0];
    let name = series.series_name;
    result.series = { name: name, seasons: [ { name: series.season_name, season_number: series.season_number, episodes: [] }] };
    result.series.seasons[0].episodes.push( { name: series.episode_name, episode_number: series.episode_number, media_url: series.media_url } );

    for( let i=1; i<json.series.length; i++ ) {
      series = json.series[i];
      result.series.seasons.forEach( season => {
          if( season.name === series.season_name ) {
            season.episodes.push( { name: series.episode_name, episode_number: series.episode_number, media_url: series.media_url } );
          }
          else {
            // add a new season
            let j = season.push( { name: series.season_name, season_number: series.season_number, episodes: [] } );
            season[j-1].episodes.push( { name: series.episode_name, episode_number: series.episode_number, media_url: series.media_url } );
          }
        }
      );
    }

    console.log(JSON.stringify(result));
  }
  catch(err) {
    console.log(err);
  }
}

执行日志

7:48:56 AM  Notice  Execution started
7:48:59 AM  Info    {"series":{"name":"Dance Academy","seasons":[{"name":"season 3","season_number":"3","episodes":[{"name":"Glue","episode_number":"1","media_url":"https://someurl.net/path"},{"name":"New Rules","episode_number":"2","media_url":"https://someurl.net/path"}]}]}}
7:48:57 AM  Notice  Execution completed

Description

This assumes there is only one "series". Here is an example script to build a multilevel object from the sample json. You have to build the first object outside of any loop so that you have something to compare with inside the loops.

Code.gs

function testJson() {
  try {
    let json = {"series":
[{"series_name":"Dance Academy","season_name":"season 3","season_number":"3","episode_name":"Glue","episode_number":"1","media_url":"https://someurl.net/path"},
{"series_name":"Dance Academy","season_name":"season 3","season_number":"3","episode_name":"New Rules","episode_number":"2","media_url":"https://someurl.net/path"}]};
    let result = {};
    let series = json.series[0];
    let name = series.series_name;
    result.series = { name: name, seasons: [ { name: series.season_name, season_number: series.season_number, episodes: [] }] };
    result.series.seasons[0].episodes.push( { name: series.episode_name, episode_number: series.episode_number, media_url: series.media_url } );

    for( let i=1; i<json.series.length; i++ ) {
      series = json.series[i];
      result.series.seasons.forEach( season => {
          if( season.name === series.season_name ) {
            season.episodes.push( { name: series.episode_name, episode_number: series.episode_number, media_url: series.media_url } );
          }
          else {
            // add a new season
            let j = season.push( { name: series.season_name, season_number: series.season_number, episodes: [] } );
            season[j-1].episodes.push( { name: series.episode_name, episode_number: series.episode_number, media_url: series.media_url } );
          }
        }
      );
    }

    console.log(JSON.stringify(result));
  }
  catch(err) {
    console.log(err);
  }
}

Execution log

7:48:56 AM  Notice  Execution started
7:48:59 AM  Info    {"series":{"name":"Dance Academy","seasons":[{"name":"season 3","season_number":"3","episodes":[{"name":"Glue","episode_number":"1","media_url":"https://someurl.net/path"},{"name":"New Rules","episode_number":"2","media_url":"https://someurl.net/path"}]}]}}
7:48:57 AM  Notice  Execution completed
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文