我正在尝试使用属性介体将Json对象设置为proerty,然后使用JSONPath
或XPATH
访问它的值。
在这种情况下,首先我将JSON对象设置为OM类型属性。在那里,使用$ctx:parent/child pattern
我可以访问这些值。但我无法在其上执行XPath
表达式(例如:$ctx:metadataOM/suppliers[0]
)。
我尝试了各种方案,并且我注意到这可以通过将Json对象设置为Payload并对其执行JSONpath
/ XPath
操作来完成。
json-eval
?JSONPath
方法或XPATH
表达式上执行get-property
/ $ctx:
吗? 注意:我正在寻找一个不使用Script medaitor
和Class Mediator
的答案。
有效负载:
{
"metadata":{
"language":"en",
"customerCountry":"GB",
"client":"coolpal",
"suppliers" : ["supplier-a","supplier-b"],
"currency":"USD"
}
}
API.xml
<inSequence>
<property expression="//jsonObject/metadata" name="metadataOM" scope="default" type="OM"/>
<property expression="//jsonObject/metadata" name="metadataSTR" scope="default" type="STRING"/>
<log level="custom">
<property expression="$ctx:metadataOM/suppliers" name="metadataOM-suppliers"/>
<property expression="$ctx:metadataOM/suppliers[0]" name="metadataOM-suppliers"/>
<property expression="json-eval($.metadataOM.suppliers)" name="eval-metadata-suppliers"/>
<property expression="json-eval($.metadataSTR.suppliers)" name="eval-metadata-suppliers"/>
<property expression="json-eval($ctx:metadataOM)" name="eval-metadata-suppliers"/>
</log>
<respond/>
</inSequence>
答案 0 :(得分:1)
在Martin的帮助下(Thanx Martin!)和一些自学,我找到了答案。
一个原因是,当json转换为XML时,它看起来如下所示。
<metadata>
<language>en</language>
<customerCountry>GB</customerCountry>
<client>coolpal</client>
<suppliers>supplier-a</suppliers>
<suppliers>supplier-b</suppliers>
<currency>USD</currency>
</metadata>
然后我存储并加载了第一个供应商,如下所示。第二个原因是,我忘了供应商没有零索引。 :)
<property expression="/" name="metadataOM" scope="default" type="OM"/>
<log level="custom">
<property expression="$ctx:metadataOM" name="metadataOM"/>
<property expression="$ctx:metadataOM//jsonObject/metadata/suppliers[1]" name="metadataOM-supplier-1"/>
</log>