我有一个下面提到的JSONPayload,我想从"content"数组中选择具有hotelcode "ALE1_LON"
的JSON对象 .
为此,我在属性介体中使用了 "$.content[?(@.hotelcode='ALE1_LON')]"
JSONPath表达式,如下所述 .
<property expression="json-eval($.content[?(@.hotelcode='ALE1_LON')])" name="hotelContet" scope="default" type="STRING"/>
<payloadFactory media-type="json">
<format>$1</format>
<args>
<arg evaluator="xml" expression="get-property('hotelContet')"/>
</args>
</payloadFactory>
<respond/>
问题是,这会返回一个空数组 .
但是,当我尝试使用online JSONPath Tester相同的有效负载和相同的JSONPath时,它表示我的JSONPath是正确的(发送如下JSON对象) .
[
{
"hotelcode":"ALE1_LON",
"hotelname":"Alexandra"
}
]
-
为什么这不适用于WSO2 ESB Propery Mediator?
-
这是因为JSONPath版本?
-
WSO2不支持这种方式吗?
-
我是否需要迭代每个元素并过滤?
JSON Payload :
{
"_id":"INV27_1112",
"_rev":"5-876038bf65752ce4505e50baea6d5581",
"content":[
{
"hotelcode":"AMB3_LON",
"hotelname":"Ambassadors Bloomsbury"
},
{
"hotelcode":"ALE1_LON",
"hotelname":"Alexandra"
},
{
"hotelcode":"ALO_LON",
"hotelname":"Aloft London Excel"
}
]
}
- WSO2 ESB版本:5.0.0
Note : "json-eval($.content[0])"
like exprssions正确返回结果
References :
1 回答
错误与
json-eval
表达式有关 .==
必须用于等式而不是= . 例如:json-eval($.content[?(@.hotelcode=='ALE1_LON')])
工作正常 . 谢谢你的支持 . 参考:https://odieweblog.wordpress.com/2015/09/20/new-json-path-expression-predicates/,http://madhukaudantha.blogspot.com/2017/02/wso2-esb-with-javascript-object-notation.html