将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