带有过滤的JSONPath在WSO2 ESB 5中无法正常工作

时间:2017-03-07 16:04:56

标签: json wso2esb jsonpath

我有下面提到过的JSONPayload,我想从"内容"中选择具有酒店代码"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有效负载:

{
    "_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

注意: "json-eval($.content[0])" like exprssions正确返回结果

参考文献:

1 个答案:

答案 0 :(得分:0)

错误与ITest3表达式有关。 json-eval必须用于等式而不是=。例如:==工作正常。谢谢你的支持。 参考: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