私は動的に生成されたjson-evalを使用してperticularホテルオブジェクトを選択するためにJSONPayloadを処理しようとしています。 下記のダイレクトjson-evalはうまく動作します。WSO2での動的json-eval式ESB 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"/>
これは、代わりに "$.content[?(@.hotelcode=='ALE1_LON')]
" のJSONのパスとして "{$ctx:xpathExpr}
" を使用しています。
TRY 2:それをeveluatingなしhotelContetプロパティに
<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')])
"。
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=='ALE1_LON')]
" のJSONのパスとして "$.content[?(@.hotelcode=={get-property('htlCode')})]
" を使用しています。
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=='ALE1_LON')]
" のJSONのパスとして "$.content[?(@.hotelcode=={$ctx.htlCode})]
" を使用しています。
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内の解決策を探しています。 XPathではなくJSONPathに制限することができます。
現在、私は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