我们有如下所示的json对象,预期结果:"(001),(011),(089),(120)"。
任何人都可以建议如何迭代json数组并将值连接起来。namespace DerivedClass
{
//use the fully qualified name for BaseClass:
public partial class DerivedClass : BaseClass.BaseClass
{
public void MyValueClass()
{
this.ValueClass();
}
}
}
提前致谢。
"(001),(011),(089),(120)"
答案 0 :(得分:4)
您可以使用迭代介体,过滤介体和具有操作范围的属性来完成此操作。试试这个解决方案最后,您将在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>
Payload工厂介体仅用于模拟您的方案。如果您的客户端发送此JSON有效负载,则您不需要具有此有效负载工厂介体。
过滤器介体用于省略前导逗号字符。如果您不使用过滤器,则会得到,(001),(011),(089),(120)
(请注意前导逗号字符)。当然,还有其他方法可以删除前导逗号字符。
有关具有操作范围的属性的更多详细信息,请参阅this。
答案 1 :(得分:0)
对于这种逻辑,我有时喜欢脚本调解器,因为IMO更容易实现字符串拼接/连接,条件xml / json元素构建等等。