I am trying to remove an array object based on value of array object property by using JSONATA transform function but the array object is not getting removed. If pmtDtls.lnAprvlStatus ='D', the object in the pmtDtls should be removed.
Input data is
{
"compCode": "0002",
"pmtDtls": [
{
"partnerType": "V",
"partnerId": "0001",
"partnerName": "Partner 1",
"payAmt": 1000,
"lnAprvlStatus": "A",
"payDesc": "nkjfkjfk nknfknk jkjkj"
},
{
"partnerType": "V",
"partnerId": "0005",
"partnerName": "Partner 2",
"payAmt": 2000,
"lnAprvlStatus": "D",
"payDesc": "fkjfk jfkfjkf jfkfjf"
}
]
}
JSONATA expression being used is $ ~> |{}| {}, pmtDtls[lnAprvlStatus='D'] |
I am expecting an output after removal of pmtDtls.lnAprvlStatus = 'D' as
{
"compCode": "0002",
"pmtDtls": [
{
"partnerType": "V",
"partnerId": "0001",
"partnerName": "Partner 1",
"payAmt": 1000,
"lnAprvlStatus": "A",
"payDesc": "nkjfkjfk nknfknk jkjkj"
}
]
}
but the same object as input is being returned
$merge([$, { "pmtDtls": $.pmtDtls[lnAprvlStatus != "D"] }])
or
$ ~> | pmtDtls | {}, lnAprvlStatus = "D" ? $keys() |
should help you get the result you need.
Update 8 Aug 2024
As suggested by Andreas below, there is a cleaner solution:
$ ~> |$|{ "pmtDtls": $.pmtDtls[lnAprvlStatus != "D"] }|
Link to JSONata playground: https://jsonatastudio.com/playground/51e20591