[英]How to concatenate JSON array values in WSO2 ESB?
我们有如下所示的json对象,预期结果为:“(001),(011),(089),(120)”。
任何人都可以建议如何迭代json数组并按提及的方式连接值。 "(001),(011),(089),(120)"
提前致谢。
{
"Element": {
"Values": {
"AgentID": "aaaaa",
"TransactionData": [
{
"No": "001"
},
{
"No": "011"
},
{
"No": "089"
},
{
"No": "120"
}
]
}
}
}
您可以通过在操作范围内使用迭代介体,过滤介体和属性来实现。 试试这个解决方案。 最后,concat-data属性中将具有(001),(011),(089),(120)
值。 我已添加完整的代理服务器,供您参考。
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="StockQuoteProxy"
transports="https,http"
statistics="disable"
trace="disable"
startOnLoad="true">
<target>
<inSequence>
<payloadFactory media-type="json">
<format>
{
"Element": {
"Values": {
"AgentID": "aaaaa",
"TransactionData": [
{
"No": "001"
},
{
"No": "011"
},
{
"No": "089"
},
{
"No": "120"
}
]
}
}
}
</format>
<args/>
</payloadFactory>
<iterate continueParent="true"
expression="//Element/Values/TransactionData"
sequential="true">
<target>
<sequence>
<property name="data"
expression="json-eval($.TransactionData.No)"
type="STRING"/>
<filter source="boolean(get-property('operation','concat-data'))" regex="false">
<then>
<property name="concat-data"
expression="fn:concat('(',get-property('data'),')')"
scope="operation"
type="STRING"/>
</then>
<else>
<property name="concat-data"
expression="fn:concat(get-property('operation','concat-data'),',','(',get-property('data'),')')"
scope="operation"
type="STRING"/>
</else>
</filter>
</sequence>
</target>
</iterate>
<log level="custom">
<property name="con-cat-data"
expression="get-property('operation','concat-data')"/>
</log>
</inSequence>
<outSequence>
<send/>
</outSequence>
</target>
<publishWSDL uri="file:repository/samples/resources/proxy/sample_proxy_1.wsdl"/>
<description/>
</proxy>
有效负载工厂调解器仅用于模拟您的方案。 如果您的客户端发送此JSON有效负载,则您不需要此有效负载工厂中介者。
筛选器介体用于省略前导逗号字符。 如果不使用过滤器,则结果为,(001),(011),(089),(120)
(请注意前导逗号字符)。 当然,可以有其他方法来删除逗号开头。
有关具有操作范围的属性的更多详细信息,请参考此内容。
对于这种逻辑,我有时更喜欢脚本介体,因为IMO较容易实现诸如字符串拼接/连接,条件xml / json元素构建等操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.