如何过滤对象数组并提取请求的有效负载?

问题描述 投票:0回答:1

我有一个要求,我需要过滤对象数组并检查所有行的“Id”是否相同。如果相同,则第一行中的“QTY”应保留下例中的源值“50”,而具有相同“Id”的其他行的“QTY”将为0。但是,如果“Id”不同在所有行中,那么“数量”应该保留来自所有行源的相同值。

输入有效负载:

 [
  {
    "QTY": 50,
    "Id": "1111"
  },
  {
    "QTY": 50,
    "Id": "1111"
  },
  {
    "QTY": 50,
    "Id": "1111"
  }
]

预期输出:

 [
  {
    "QTY": 50,
    
  },
  {
    "QTY": 0,
    
  },
  {
    "QTY": 0,
   
  }
]

如果输入在所有行中都带有不同的“Id”,如下所示

 [
  {
    "QTY": 50,
    "Id": "1111"
  },
  {
    "QTY": 50,
    "Id": "1133"
  },
  {
    "QTY": 50,
    "Id": "1122"
  }
]

那么预期结果应该是:

 [
  {
    "QTY": 50,
  },
  {
    "QTY": 50,
  },
  {
    "QTY": 50
  }
]
mule dataweave mulesoft
1个回答
0
投票

这是一个简单的映射,仅保留

QTY
属性,但条件是仅传递相同的值,除非存在唯一的
Id
并且索引不是第一项。在这种情况下,我们将值替换为 0。我编写了一个辅助函数,通过按
Id
分组并计算分组键的数量来确定是否存在唯一的
Id
。如果数字为 1,则只有一个
Id
。我将其用作条件,如果为 true,我会检查映射中的索引以设置 0。

%dw 2.0
output application/json
fun singleId(a)=sizeOf(a groupBy $.Id pluck $$) == 1
---
payload map (
    QTY: if (singleId(payload)) (if ($$==0) $.QTY else 0)
         else $.QTY
)
© www.soinside.com 2019 - 2024. All rights reserved.