我具有以下结构的JSON数组。
{"paymentItems": [
{
"amount": "180000",
"code": "28"
},
{
"amount": "396000",
"code": "06"
},
{
"amount": "1460000",
"code": "01"
}
]
}
我正在尝试使用其他JSON值丰富数组列表中的每个项目。
<foreach expression="//paymentItems" id="1">
<sequence>
<property expression="//paymentItems/amount" name="amount" scope="default" type="STRING"/>
<property expression="//paymentItems" name="body" scope="default" type="STRING"/>
<log>
<property expression="$ctx:amount" name="INIDIVIDUAL_AMOUNT"/>
</log>
<script language="js"><![CDATA[var amount = mc.getProperty('amount'); var naira = amount/100; mc.setProperty("nairaValue", naira);]]></script>
<log>
<property expression="get-property('nairaValue')" name="NAIRA_VAL"/>
</log>
<property expression="get-property('nairaValue')" name="naira" scope="default" type="STRING"/>
<enrich>
<source type="custom" xpath="$ctx:nairaValue"/>
<target action="child" type="body"/>
</enrich>
</sequence>
</foreach>
如您所见,我在foreach中处理了值,然后使用结果并尝试将其添加到数组项中,但是它不会引发任何错误并且不会添加该值。
答案 0 :(得分:1)
Foreach调解员执行以下操作
由于每次迭代,我们都将克隆一个新的消息上下文(例如context2),而原始消息上下文(例如context1)是一个单独的消息上下文,因此我们无法从context2扩展到context1。
这就是您所遇到的行为的原因。
作为一种补救措施,您可以从脚本介体本身进行迭代,并根据需要更改消息。