将 Google Sheet 转换为多级 JSON 数组

Convert Google Sheet as Multi-level JSON Array

我正在尝试使用 Apps Script 将 sheet 中的值转换为多级 JSON

将值转换为单个级别 JSON 很容易,如下所示:

[{
  "name": "Bob Jones",
  "phone": "555-555-5555",
  "street": "123 Somewhere St.",
  "city": "Nowhere",
  "state": "ID",
  "postal": 45632,
  "country": "USA"
}]

但是,我想要的是:

[{
  "name": "Bob Jones",
  "phone": "555-555-5555",
  "address": {
    "street": "123 Somewhere St.",
    "city": "Nowhere",
    "state": "ID",
    "postal": 45632,
    "country": "USA"
  }
}]

这是用于格式化 JSON:

的代码
function makeJSON_(object, options) {
  if (options.format == FORMAT_PRETTY) {
    var jsonString = JSON.stringify(object, null, 4);
  } else if (options.format == FORMAT_MULTILINE) {
    var jsonString = Utilities.jsonStringify(object);
    jsonString = jsonString.replace(/},/gi, '},\n');
    jsonString = prettyJSON.replace(/":\[{"/gi, '":\n[{"');
    jsonString = prettyJSON.replace(/}\],/gi, '}],\n');
  } else {
    var jsonString = Utilities.jsonStringify(object);
  }
  return jsonString;
}

设置 "pre-conversion" sheet 来创建 JSON 子字符串会很容易,但这并不灵活,而且很难维护。

如何JSON.stringify() sheet 数据自动创建子字符串?

要从 json 的版本转到您想要的版本,您可以执行以下操作 --

var json = [{
  "name": "Bob Jones",
  "phone": "555-555-5555",
  "street": "123 Somewhere St.",
  "city": "Nowhere",
  "state": "ID",
  "postal": 45632,
  "country": "USA"
}]

for (var i=0; i < json.length; i++){
  var currentObj = json[i];
  // make a temporary address object
  var address = {};
  // copy all the attributes over to the temp object
  address.street = currentObj.street;
  address.city = currentObj.city;
  address.state = currentObj.state;
  address.postal = currentObj.postal;
  address.country = currentObj.country;
  // add address to the original object
  currentObj.address = address;
  // get rid of the following attributes from parent
  delete currentObj.street;
  delete currentObj.city;
  delete currentObj.state;
  delete currentObj.postal;
  delete currentObj.country;
}


console.log(json);

比替换字符串中的东西容易得多。

http://codepen.io/anon/pen/XKOrXa