首页 文章

未从Google表格中正确解析JSON数据

提问于
浏览
0

我正在尝试使用脚本将Google表格数据转换为JSON格式 .

这是一个测试谷歌表:https://docs.google.com/spreadsheets/d/1zEts1AaAseO4MlLf5OA--Ylp-bH9aXe-1pacjstv4GI/edit#gid=0

但是JSON格式如下所示:
JSON Format of the Test Sheet

这根本不正确!下面给出了脚本代码,并提供了测试表的正确凭据:

function doGet(e) {

  var sheetName = "TestSheet";
  var sheetId   = "1zEts1AaAseO4MlLf5OA--Ylp-bH9aXe-1pacjstv4GI";

  var book = SpreadsheetApp.openById(sheetId);
  var sheet = book.getSheetByName(sheetName);

  var json = convertSheet2JsonText(sheet);

  return ContentService
      .createTextOutput(JSON.stringify(json))
      .setMimeType(ContentService.MimeType.JSON);
}

function convertSheet2JsonText(sheet) {

  var sheetName = "TestSheet";
  var sheetId   = "1zEts1AaAseO4MlLf5OA--Ylp-bH9aXe-1pacjstv4GI";

  var book = SpreadsheetApp.openById(sheetId);
  var sheet = book.getSheetByName(sheetName);
  var colStartIndex = 1;
  var rowNum = 1;
  var firstRange = sheet.getRange(2, 2, 2, sheet.getLastColumn());
  var firstRowValues = firstRange.getValues();
  var titleColumns = firstRowValues[0];

  // after the second line(data)
  var lastRow = sheet.getLastRow();
  var rowValues = [];
  for(var rowIndex=2; rowIndex<=lastRow; rowIndex++) {
    var colStartIndex = 1;
    var rowNum = 1;
    var range = sheet.getRange(rowIndex, colStartIndex, rowNum, 
  sheet.getLastColumn());
    var values = range.getValues();
    rowValues.push(values[0]);
}

// create json
  var jsonArray = [];
  for(var i=0; i<rowValues.length; i++) {
    var line = rowValues[i];
    var json = new Object();
    for(var j=0; j<titleColumns.length; j++) {
      json[titleColumns[j]] = line[j];
    }
   jsonArray.push(json);
  }
  return jsonArray;
 }

我猜测convertSheet2JsonText函数内部的逻辑是错误的,这导致了问题 . 非常感谢您的帮助 . 谢谢 .

此测试表的正确JSON格式应如下所示:
Right Format of JSON

1 回答

  • 2

    您希望使用脚本从共享电子表格中检索以下对象 .

    [
      {
        "firstName": "john",
        "lastName": "doe",
        "age": 12,
        "place": "boston"
      },
      {
        "firstName": "nahid",
        "lastName": "patwary",
        "age": 21,
        "place": "sylhet"
      },
      {
        "firstName": "kishor",
        "lastName": "pasha",
        "age": 15,
        "place": "california"
      }
    ]
    

    如果我的理解是正确的,那么这个修改怎么样?我认为检索 titleColumns 的范围可能是您遇到问题的原因 . 那么如何修改如下?

    来自:

    var firstRange = sheet.getRange(2, 2, 2, sheet.getLastColumn());
    

    To:

    var firstRange = sheet.getRange(1, 1, 1, sheet.getLastColumn());
    

    如果我误解了你的问题,请告诉我 . 我想修改它 .

相关问题