重写 JSON 对象的结构

Rewrite structure of a JSON Object

我需要为一个项目制作很多 JSON 文件。此 JSON 来自 Google 电子表格。使用 data-drive 我得到 JSON 看起来像这样:

{
  "custom_id": 1,
  "another_thing": "pizza",
  "step_1_message": "msg",
  "step_1_hint": "hint",
  "step_1_intent": "intent",
  "step_2_message": "msg",
  "step_2_hint": "hint",
  "step_2_intent": "intent"
}

现在我想要一个对象本身的所有步骤。像这样:

{
  "custom_id": 1,
  "another_thing": "pizza",
  "steps": [
   {"step_id": 1, "message": "msg", hint: "hint", "intent": "intent"},
   {"step_id": 2, "message": "msg", hint: "hint", "intent": "intent"}
  ]
}

这是可行的解决方案:

var input = {
  "custom_id": 1,
  "another_thing": "pizza",
  "step_1_message": "msg",
  "step_1_hint": "hint",
  "step_1_intent": "intent",
  "step_2_message": "msg",
  "step_2_hint": "hint",
  "step_2_intent": "intent"
};
var output = {
    steps: []
};
for (var key in input) {
    var m = key.match(/step_([0-9]+)_(\w+)/);
    if (m) {
        var num = m[1];
        var name = m[2];
        if (!output.steps[num-1]) {
            output.steps[num-1] = {
                step_id: num
            };
        }
        output.steps[num-1][name] = input[key];
    } else {
        output[key] = input[key];
    }
}

珍珠。

尝试匹配每个键值对与正则表达式以查找匹配 "step" 的键,而不是将此键值对和 forEach 进一步匹配消息、提示等。使用这些值作为构造函数值为您的对象。 如果此 json 具有不同数量的键值对,则您的对象 class 定义中需要一个动态构造函数。