请您帮我写下以下JOLT规范?
输入:
{
"title": [
"vsnu",
"anothervsnu"
],
"anothertitle": [
"vsnu",
"anothervsnu"
]
}
预期产出:
{
Response : [
{
"head" : "title",
"name" : "vsnu"
},
{
"head" : "title",
"name" : "anothervsnu"
},
{
"head" : "anothertitle",
"name" : "vsnu"
},
{
"head" : "anothertitle",
"name" : "anothervsnu"
}
]
}
过去3天我被困在这里。请帮帮我。 我希望上面的问题解释了期望,我写这篇文章只是因为StackOverflow显示了验证错误消息。
提前致谢。
答案 0 :(得分:0)
您只需要两个迭代器,一个在输入的键上,另一个在属性的数组上。
function buildObject(o) {
var result = [];
Object.keys(o).forEach(function (k) {
o[k].forEach(function (a) {
result.push({ head: k, name: a });
});
});
return { Response: result };
}
var input = { "title": ["vsnu", "anothervsnu"], "anothertitle": ["vsnu", "anothervsnu"] },
output = buildObject(input);
document.write('<pre>' + JSON.stringify(output, 0, 4) + '</pre>');
&#13;
答案 1 :(得分:0)
由于Jolt“shift”一次处理一个项目,因此无法写入输出,即数组地图。
可以做到,但需要两班倒。第一个构建“head”和“name”的并行数组,第二个使用并行数组中的索引号将它们转换为Response数组。
规格
[
{
"operation": "shift",
"spec": {
"*": { // title or anothertitle
"*": { // array index
"*": { // actual array value "vsnu"
"$2": "head[]", // for each array value grab a copy of the "title"
"$": "name[]"
}
}
}
}
},
{
"operation": "shift",
"spec": {
"head": {
"*": "Response[&].head"
},
"name": {
"*": "Response[&].name"
}
}
}
]