无法从Google表格正确解析JSON数据

时间:2018-09-29 09:54:38

标签: json google-apps-script google-sheets

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

这是一个测试版Google表格: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 个答案:

答案 0 :(得分: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());

收件人:

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

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