我有一个表格的JSON有效负载:
[
{"id": 1, "list": [1], "name":"one"},
{"id": 2, "list": [1,2], "name":"two"},
{"id": 3, "list": [], "name":"three"}
]
我想从数组中过滤掉包含空"list"
属性的元素。换句话说,我想丢弃id=3
元素并仅处理上例中的第一个和第二个元素。
目前,我的过滤器如下所示:
<!-- ne == not equals -->
<int:filter id="filter"
input-channel="in"
output-channel="out"
expression="#jsonPath(payload, '$[*].list') ne '[]'"
discard-channel="consoleOutputChannel" />
但这不起作用,我该如何向expression
表明我要排除空list
属性的元素?
答案 0 :(得分:1)
将表达式更改为:
$.[?(@.list.length()> 0)]
[?(<expression>)]
:过滤表达式@
:正在处理的当前节点
通过过滤谓词list.length()
:list
数组答案 1 :(得分:0)
在@Jerry06的帮助下,我能够做到我想要的但只有 之后才能拆分有效载荷数组。
这是完整的解决方案,但我只能因为他的帮助(thx)而这样做,所以学分归他所有。
我的代码现在看起来像这样:
<!-- Split payload into individual messages -->
<int:splitter id="splitter"
input-channel="in"
output-channel="toFilter"
expression="#jsonPath(payload, '$.[*]')"/>
<!-- Filters out messages with empty array of list -->
<int:filter id="filter"
input-channel="toFilter"
output-channel="out"
discard-channel="consoleOutputChannel"
expression="#jsonPath(payload, '$.list.length()') > 0"/>