【问题标题】:Convert Google Sheet as Multi-level JSON Array将 Google Sheet 转换为多级 JSON 数组
【发布时间】:2016-12-20 09:32:04
【问题描述】:

我正在尝试使用Apps Script 将工作表中的值转换为多级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;
}

设置一个“转换前”表来创建JSON 子字符串很容易,但这并不灵活,而且很难维护。

如何JSON.stringify()工作表数据自动创建子串?

【问题讨论】:

    标签: javascript json google-apps-script stringify


    【解决方案1】:

    要从您拥有的 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

    【讨论】:

    • 我只是建议最后的更改。它有效!
    • 我将代码修改为不使用 jquery,但没有意识到我搞砸了!很高兴它现在可以工作了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    • 2019-11-06
    • 2016-06-15
    相关资源
    最近更新 更多