我需要为项目制作大量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"}
]
}
答案 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具有不同数量的键值对,则需要在对象类定义中使用动态构造函数。