1

我有一个结构如下的 JSON 对象。循环时key_two我想创建一个我将返回的新对象。返回的对象应包含 a title,其值为 fromkey_one的名称,其中的 idkey_one与当前循环的节点 from 相匹配key_two

这两个对象都包含其他键,但我不知道的第一步是如何在循环时从同级对象中获取数据并将其与当前值匹配。

{
  "key_one": [
    {
      "name": "some_cool_title",
      "id": "value_one",
      ...
    }
  ],
  "key_two": [
    {
      "node": "value_one",
      ...
    }
  ],
}
4

2 回答 2

1

这是“加入”操作的一个很好的例子(用 SQL 术语)。JSONata 在路径表达式中支持这一点。请参阅https://docs.jsonata.org/path-operators#-context-variable-binding

因此,在您的示例中,您可以编写:

key_one@$k1.key_two[node = $k1.id].{
    "title": $k1.name
}

然后,您可以通过引用任一原始对象中的项目将额外字段添加到结果对象中。例如:

key_one@$k1.key_two[node = $k1.id].{
    "title": $k1.name,
    "other_one": $k1.other_data,
    "other_two": other_data
}

https://try.jsonata.org/--2aRZvSL

于 2021-06-11T08:55:09.400 回答
0

我似乎已经找到了解决方案。

[key_two].$filter($$.key_one, function($v, $k){
    $v.id = node
}).{"title": name ? name : id}

给出:

[
  {
    "title": "value_one"
  },
  {
    "title": "value_two"
  },
  {
    "title": "value_three"
  }
]

如果将来有人遇到类似问题,请将此留在这里。

于 2021-06-10T12:14:03.287 回答