【问题标题】:JSONata transform operation to delete array elementsJSONata 转换操作删除数组元素
【发布时间】:2021-08-05 23:04:07
【问题描述】:

我正在使用 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>)|`

【问题讨论】:

    标签: arrays transform jsonata


    【解决方案1】:

    与其尝试删除单个产品,不如将 Product 数组替换为包含您想要的产品的数组:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多