重写JSON对象的结构

时间:2015-04-10 11:42:39

标签: javascript json javascript-objects

我需要为项目制作大量JSON文件。此JSON来自Google Spreadsheets。使用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"}
  ]
}

2 个答案:

答案 0 :(得分:6)

这是工作解决方案:

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];
    }
}

答案 1 :(得分:0)

Perlish的。

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