I have a JSON payload of the form:
[
{"id": 1, "list": [1], "name":"one"},
{"id": 2, "list": [1,2], "name":"two"},
{"id": 3, "list": [], "name":"three"}
]
And I want to filter out the element from the array the contains an empty "list" property. In other words, I want to discard the element with id=3 and process only the first and second element in my example above.
Currently, my filter looks like this:
<!-- ne == not equals -->
<int:filter id="filter"
input-channel="in"
output-channel="out"
expression="#jsonPath(payload, '$[*].list') ne '[]'"
discard-channel="consoleOutputChannel" />
But this is not working, how should I indicate to my expression that I want to exclude elements with empty list properties?
Change your expression to:
$.[?(@.list.length()> 0)]
[?(<expression>)] : filter expression@ : The current node being processed
by a filter predicatelist.length() : the length of list arrayMore detail at JsonPath
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With