【问题标题】:JSON data not parsed correctly from Google Sheets来自 Google 表格的 JSON 数据未正确解析
【发布时间】:2018-09-29 09:54:37
【问题描述】:

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

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

但 JSON 格式看起来像这样:

这根本不正确! 下面给出了脚本代码以及测试表的正确凭据:

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 格式应如下所示:

【问题讨论】:

  • 您不应该逐行循环 - 这对于大纸张会超时。使用getDataRange

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


【解决方案1】:

您想使用您的脚本从共享电子表格中检索以下对象。

[
  {
    "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());

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

【讨论】:

  • @Abdullah Al Nahid 很高兴您的问题已解决。也谢谢你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-02
  • 2021-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多