MuleSoft DataWeave数组与JSON对象流处理行为差异疑问
DataWeave数组与对象流处理行为差异原因
这是DataWeave流式处理的设计特性,并非你的理解有误,两种类型的索引访问规则本质不同:
1. 数组类型的流式访问逻辑
开启流式处理(输入配置streaming=true+输出配置deferred=true)的JSON数组是单向消费的迭代流,索引访问的是当前流指针的相对偏移量,而非全局固定位置:
- 执行
payload[2]时,流指针从起始位置向后移动3个元素,消费索引0、1、2的内容后,指针停留在索引2之后 - 后续执行
payload[1]时,从当前指针位置向后偏移1位,指向原数组的索引4的元素,因此返回{"row4": "4"}
这种设计的目的是无需加载全量数组到内存,支持超大规模集合的低内存处理。
2. 对象类型的流式访问逻辑
JSON是KV结构,即使开启流式,DataWeave处理对象时会先加载所有键的顺序元数据到内存,数字索引访问的是全局固定顺序的键位置,和流指针没有关联:
- 你用数字索引访问对象时,本质是按照键的插入顺序,取对应全局位置的键的值
- 先执行
payload[2]拿到全局第3个键row2对应的值"2",再执行payload[1]仍然取全局第2个键row1对应的值"1",不会因为之前的访问改变索引的映射关系
补充说明
如果你需要对象也实现类似数组的单向流消费逻辑,可以先用entriesOf(payload)将对象转为键值对数组后再进行流式处理,此时访问规则就和数组完全一致。
内容的提问来源于stack exchange,提问作者Vishwas Pawar
相关产品推荐
相关产品推荐

