0

我正在使用 JSONata 将整个输入返回到结果集中,但删除了输入中指定的数组中的某些元素。

这让我了解此处记录的“转换”操作:https ://docs.jsonata.org/other-operators#-------transform

您可以在其中通过路径匹配数据,提供要添加到匹配内容的对象,然后可以选择指定字符串或字符串数​​组来表示要删除的数据的键。

但是你真的可以使用这个操作从一个匹配条件的数组中删除一个元素吗?我可以把它变成一个空的对象,但这不是我想要的。我想完全删除它。

要使用 try.jsonata.org 中的 Product-Order 示例,请考虑以下示例:https ://try.jsonata.org/QaZyN6nHr

该表达式$ ~> |Account.Order.Product[SKU!="0406654608"]|$, $keys($)|返回一切正确 - 查找并替换元素中Product没有特定 SKU 的所有元素。上面的操作数$keys($)说“从所选对象中删除所有键 - 一个空对象。所以我们从这个开始:

{
  "Account": {
    "Account Name": "Firefly",
    "Order": [
      {
        "OrderID": "order103",
        "Product": [
          {
            "Description": {
              "Colour": "Purple",
              "Depth": 210,
              "Height": 200,
              "Weight": 0.75,
              "Width": 300
            },
...
            "SKU": "0406654608"
          },
          {
      ...
            "SKU": "0406634348"
          }
        ]
      },
      {
        "OrderID": "order104",
        "Product": [
          { 
            ....
            "SKU": "xxxx",
          },
          ....
        ]
      },
      ....
    ]
  }
}

但根据上述呈现空对象:

{
  "Account": {
    "Account Name": "Firefly",
    "Order": [
      {
        "OrderID": "order103",
        "Product": [
          {
            "Description": {
              "Colour": "Purple",
              "Depth": 210,
              "Height": 200,
              "Weight": 0.75,
              "Width": 300
            },
            "Price": 34.45,
            "Product Name": "Bowler Hat",
            "ProductID": 858383,
            "Quantity": 2,
            "SKU": "0406654608"
          },
          {}
        ]
      },
      {
        "OrderID": "order104",
        "Product": [
          {},
          {}
        ]
      }
    ]
  }
}

所以主要问题是我不只是想删除数组内的对象中的值......我想删除对象本身

那么我怎样才能得到它,使输出看起来像这样呢?

{
  "Account": {
    "Account Name": "Firefly",
    "Order": [
      {
        "OrderID": "order103",
        "Product": [
          {
            "Description": {
              "Colour": "Purple",
              "Depth": 210,
              "Height": 200,
              "Weight": 0.75,
              "Width": 300
            },
            "Price": 34.45,
            "Product Name": "Bowler Hat",
            "ProductID": 858383,
            "Quantity": 2,
            "SKU": "0406654608"
          }
          /* NO EMPTY OBJECT */
        ]
      },
      {
        "OrderID": "order104",
        "Product": [
          /* NO EMPTY OBJECTS */
        ]
      }
    ]
  }
}

那么我应该在下面的“删除”部分中添加什么?

$ ~> |Account.Order.Product[SKU!="0406654608"]|$, <BLAST THIS>)|`
4

1 回答 1

0

而不是尝试删除单个产品,只需将 Product 数组替换为包含您想要的产品的数组:

$ ~> | Account.Order | { 'Product': [Product[SKU='0406654608']] } |

https://try.jsonata.org/9GJeYZdd0

于 2021-08-16T09:56:27.757 回答