重写 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 定义中需要一个动态构造函数。
我需要为一个项目制作很多 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 定义中需要一个动态构造函数。