我正在尝试使用动态生成的json-eval来处理JSONPayload以选择特定的酒店对象。
直接json-eval表达式:
json-eval($.content[?(@.hotelcode=='ALE1_LON')])
我已经尝试了以下类似的选择,但没有任何运气。
尝试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}
“而不是“$.content[?(@.hotelcode=='ALE1_LON')]
“作为JSON路径。
尝试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属性,而不评估它。
尝试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')})]
“而不是“$.content[?(@.hotelcode=='ALE1_LON')]
“作为JSON路径。
尝试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})]
“而不是“$.content[?(@.hotelcode=='ALE1_LON')]
“作为JSON路径。
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上的below like方法来管理自己。
<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"/>
- WSO 2 ESB版本:5.0.0
2条答案
按热度按时间htrmnn0y1#
请测试此解决方案以解决您的问题
ttvkxqim2#
我正在使用版本6.6.0 EI,此解决方案对我有效:
我希望能帮助你和其他人与不同的EI版本