我試圖使用動態生成的json-eval來選擇一個特定的酒店對象來處理JSONPayload。 下面提到的直接json-eval工作正常。WSO2 ESB中的動態json-eval表達式5
直接JSON-EVAL表達:
json-eval($.content[?(@.hotelcode=='ALE1_LON')])
我已經試過beow類似的選項,但還沒有任何運氣。
TRY 1:
<property name="htlCode" scope="default" type="STRING" value="'ALE1_LON'"/>
<property expression="fn:concat('$.content[?(@.hotelcode==',get-property('htlCode'),')]')" name="xpathExpr" scope="default" type="STRING"/>
<property expression="json-eval({$ctx:xpathExpr})" name="hotelContet" scope="default" type="STRING"/>
這裏使用了 「{$ctx:xpathExpr}
」 作爲JSON路徑,而不是 「$.content[?(@.hotelcode=='ALE1_LON')]
」。
TRY 2:
<property name="htlCode" scope="default" type="STRING" value="'ALE1_LON'"/>
<property expression="fn:concat('json-eval($.content[?(@.hotelcode==',get-property('htlCode'),')])')" name="hotelContet" scope="default" type="STRING"/>
這店 「json-eval($.content[?(@.hotelcode=='ALE1_LON')])
」 到hotelContet屬性,而不eveluating它。
TRY 3:
<property name="htlCode" scope="default" type="STRING" value="'ALE1_LON'"/>
<property expression="json-eval($.content[?(@.hotelcode=={get-property('htlCode')})])" name="hotelContet" scope="default" type="STRING"/>
這裏使用了 「$.content[?(@.hotelcode=={get-property('htlCode')})]
」 作爲JSON路徑,而不是 「$.content[?(@.hotelcode=='ALE1_LON')]
」。
TRY 4:
<property name="htlCode" scope="default" type="STRING" value="'ALE1_LON'"/>
<property expression="json-eval($.content[?(@.hotelcode=={$ctx.htlCode})])" name="hotelContet" scope="default" type="STRING"/>
這裏使用了 「$.content[?(@.hotelcode=={$ctx.htlCode})]
」 作爲JSON路徑,而不是 「$.content[?(@.hotelcode=='ALE1_LON')]
」。
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"
}
]
}
注:我知道,這可以通過腳本/類中介來完成。但我正在尋找json-eval中的解決方案。如果我能限制到JSONPath而不是XPath,那更好。
目前我正在管理自己使用下面類似JSON的方法。
<property name="htlCode" scope="default" type="STRING" value="'ALE1_LON'"/>
<property expression="fn:concat('//content[hotelcode=',$ctx:htlCode,']')" name="hotelContentExpr" scope="default" type="STRING"/>
<property expression="evaluate($ctx:hotelContentExpr)" name="hotelContent" scope="default" type="STRING"/>
- WSO2 ESB版本:5.0.0
謝謝你的答案。是的,我可以通過JSON來處理XPath,正如我在後面提到的那樣。但我期待在json-eval函數中使用JSONPath做到這一點。 – namalfernandolk