【发布时间】:2022-01-05 12:44:30
【问题描述】:
我一直在尝试了解案例集合和对象中的数据编织流。在收集的情况下,它可以按预期工作,例如在下面的paylod中
[
{"row0" : "0"},
{"row1" : "1"},
{"row2" : "2"},
{"row3" : "3"},
{"row4" : "4"}
]
如果我尝试以下脚本
%dw 2.0
input payload application/json
output application/json deferred=true
---
[payload[2] , payload[1]]
我得到以下输出
[
{
"row2": "2"
},
{
"row4": "4"
}
]
从上面的例子可以看出payload[1]返回{ "row4": "4" },因为在执行payload[2]之后,第二个元素指的是实际有效载荷的第四个元素。
但是在 Json 对象的情况下没有看到相同的行为,这里是示例
输入负载
{
"row0" : "0",
"row1" : "1",
"row2" : "2",
"row3" : "3",
"row4" : "4"
}
dataweave 脚本(与收集时使用的脚本相同)
%dw 2.0
input payload application/json
output application/json deferred=true
---
[payload[2] , payload[1]]
这将输出返回给我
[
"2",
"1"
]
但是从之前收集的情况来看,它不应该返回以下输出吗?
[
"2",
"4"
]
因为原始对象中的第 2 个索引元素已经被消耗,并且现在剩余的下一个索引为 1 的元素是原始对象的第 4 个索引元素
这里是示例流程
<flow name="streamingFlowObjects" doc:id="c5f23756-5083-4a7d-a173-edad1ad69c75" >
<http:listener doc:name="Listener" doc:id="4bfde9f0-27ee-4e77-8c7a-4be0ffe8f488" config-ref="HTTP_Listener_config" path="/sync" outputMimeType="application/json; streaming=true">
</http:listener>
<logger level="INFO" doc:name="Logger" doc:id="c1bb4dde-c965-4d92-bb06-5e4fd2ae2166" message="#[output application/json --- 'Started ' ++ now()]"/>
<ee:transform doc:name="Transform Message" doc:id="1fe3dda6-9aa7-4948-9c77-d8ec033ec029" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
input payload application/json
output application/json deferred=true
---
[payload[1] , payload[0]]]]></ee:set-payload>
</ee:message>
</ee:transform>
<logger level="INFO" doc:name="Logger" doc:id="31033cc4-1827-4960-9c64-588bda1989cf" message="#[output application/json --- 'Completed ' ++ now()]"/>
</flow>
谁能解释为什么在对象和数组中观察到这种差异,或者我的理解不正确。
【问题讨论】: