将 JSONata 中具有数组的对象合并到对象数组中

发布于 01-09 18:46 字数 363 浏览 5 评论 0原文

我需要使用 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"
  }]}

I need to merge the array item to object using JSONata
If my input is

{"skus":[
  {
    "a":1,
    "c":3,
    "b":["n"]
  },
  {
    "a":6,
    "c":7,
    "b":["f","h"]
  }]}

I need output as below. I need it to be expanded within same object

{"skus":[
  {
    "a":1,
    "c":3,
    "b":"n"
  },
  {
    "a":6,
    "c":7,
    "b":"f"
  },
  {
    "a":6,
    "c":7,
    "b":"h"
  }]}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

新一帅帅2025-01-16 18:46:10

您可以使用 实现上述结果减少

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);

You can achieve the above result using 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);

隔纱相望2025-01-16 18:46:10
  $arrayOfArrays := $map(skus, function($sku) {
    $map($sku.b, function($val) { 
      {"a": $sku.a, "c": $sku.c, "b" : $val}
    })
  });
  
  {"skus": $reduce($arrayOfArrays,$append)}

假设它始终是数组“b”,那么这个 jsonata 表达式应该可以工作。下面附上此处的屏幕截图

在此处输入图像描述

  $arrayOfArrays := $map(skus, function($sku) {
    $map($sku.b, function($val) { 
      {"a": $sku.a, "c": $sku.c, "b" : $val}
    })
  });
  
  {"skus": $reduce($arrayOfArrays,$append)}

Assuming that its always "b" which is the array, this jsonata expression should work. Screenshot attached below from here

enter image description here

眼藏柔2025-01-16 18:46:10
{
    "skus":skus.$.b.
    {
        "a": %.a,
        "c":%.c,
        "b":$
    }
}

这是 JSONata 规范。尝试一下https://try.jsonata.org/P5E2v0FNn

{
    "skus":skus.$.b.
    {
        "a": %.a,
        "c":%.c,
        "b":$
    }
}

This is the JSONata spec. Try it https://try.jsonata.org/P5E2v0FNn

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文