arraysobjectjsonata

Removing an array object from main Object


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


Solution

  • $merge([$, { "pmtDtls": $.pmtDtls[lnAprvlStatus != "D"] }])

    or

    $ ~> | pmtDtls | {}, lnAprvlStatus = "D" ? $keys() |

    should help you get the result you need.