将JSONata中具有数组的对象合并到对象数组中
Merging the object having array in JSONata into array of objects
我需要使用 JSONata 将数组项合并到对象
如果我的输入是
{"skus":[
{
"a":1,
"c":3,
"b":["n"]
},
{
"a":6,
"c":7,
"b":["f","h"]
}]}
我需要如下输出。我需要在同一个对象中扩展它
{"skus":[
{
"a":1,
"c":3,
"b":"n"
},
{
"a":6,
"c":7,
"b":"f"
},
{
"a":6,
"c":7,
"b":"h"
}]}
您可以使用 reduce
实现上述结果
let json = {"skus":[
{
"a":1,
"c":3,
"b":["n"]
},
{
"a":6,
"c":7,
"b":["f","h"]
}]};
json.skus = json.skus.reduce((acc, item) => {
if(typeof item.b === "object"){
let a = item.b.map(i =>{
let out = {...item};
out.b = i;
return out;
})
return acc.concat(a);
}else{
return acc.concat(item);
}
},[]);
console.log(json);
$arrayOfArrays := $map(skus, function($sku) {
$map($sku.b, function($val) {
{"a": $sku.a, "c": $sku.c, "b" : $val}
})
});
{"skus": $reduce($arrayOfArrays,$append)}
假设数组始终为“b”,则此 jsonata 表达式应该有效。下面附上 here
的屏幕截图
{
"skus":skus.$.b.
{
"a": %.a,
"c":%.c,
"b":$
}
}
这是 JSONata 规范。试一试https://try.jsonata.org/P5E2v0FNn
我需要使用 JSONata 将数组项合并到对象 如果我的输入是
{"skus":[
{
"a":1,
"c":3,
"b":["n"]
},
{
"a":6,
"c":7,
"b":["f","h"]
}]}
我需要如下输出。我需要在同一个对象中扩展它
{"skus":[
{
"a":1,
"c":3,
"b":"n"
},
{
"a":6,
"c":7,
"b":"f"
},
{
"a":6,
"c":7,
"b":"h"
}]}
您可以使用 reduce
实现上述结果let json = {"skus":[
{
"a":1,
"c":3,
"b":["n"]
},
{
"a":6,
"c":7,
"b":["f","h"]
}]};
json.skus = json.skus.reduce((acc, item) => {
if(typeof item.b === "object"){
let a = item.b.map(i =>{
let out = {...item};
out.b = i;
return out;
})
return acc.concat(a);
}else{
return acc.concat(item);
}
},[]);
console.log(json);
$arrayOfArrays := $map(skus, function($sku) {
$map($sku.b, function($val) {
{"a": $sku.a, "c": $sku.c, "b" : $val}
})
});
{"skus": $reduce($arrayOfArrays,$append)}
假设数组始终为“b”,则此 jsonata 表达式应该有效。下面附上 here
的屏幕截图{
"skus":skus.$.b.
{
"a": %.a,
"c":%.c,
"b":$
}
}
这是 JSONata 规范。试一试https://try.jsonata.org/P5E2v0FNn