使用Jsonata将对象数组转换为以索引为键的键值对象列表
实现数组转索引键值对象的Jsonata方案
需求说明
- 将源JSON中
Account.Order[0]下的Product对象数组,转换为以数组索引(字符串类型的"0"、"1")为键的键值对象 - 最终输出包裹在
result字段下,每个索引对应的value保留原Product对象的全部字段和嵌套结构
可用Jsonata语句
{ "result": $merge(Account.Order[0].Product.( { $string($pos): $ } )) }
逻辑解释
Account.Order[0].Product:通过路径定位到待转换的Product目标数组,源数据中Order数组仅包含1个订单元素,因此取索引0的订单节点- 数组遍历上下文里的内置变量
$pos代表当前元素从0起始的索引值,通过$string($pos)将数值索引转为字符串类型作为对象键,当前遍历到的Product元素$作为值,为每个数组项生成一个单键对象 $merge()函数将遍历生成的所有单键对象合并为一个平面对象,最终作为result字段的值,和目标输出结构完全匹配
补充说明
- 转换过程会完整保留Product对象下所有嵌套字段(比如Description对象的全部属性),不会出现字段丢失
- 如果后续需要处理Order数组下的多个订单,可基于当前语句调整路径遍历逻辑即可
内容的提问来源于stack exchange,提问作者Hosein Zarifi
相关产品推荐
相关产品推荐

