JOLT转换技术咨询:如何将外层属性分散至数组子对象并为列表元素添加指定字段
解决JOLT转换中为列表元素添加关联字段的问题
我明白你现在的困惑——要把code字段和detail数组里的每个num一一对应,生成新的对象数组对吧?咱们一步步来解决。
你的输入数据
{ "results": 1, "data": [ { "detail": [ { "num": "140" }, { "num": "158" }, { "num": "180" }, { "num": "183" }, { "num": "213" } ], "code": "01007" } ], "response_code": 200 }
期望输出
[ { "code": "01007", "num": "140" }, { "code": "01007", "num": "158" }, { "code": "01007", "num": "180" }, { "code": "01007", "num": "183" }, { "code": "01007", "num": "213" } ]
你现有Spec的问题
你当前的shift操作里,尝试用"code": "[&1].code"来关联,但这里的&1指向的是detail数组的索引,而code字段是在detail的父级对象里,所以没法直接拿到这个值,需要用更高层级的索引来引用。
正确的JOLT转换Spec
[ { "operation": "shift", "spec": { "data": { "*": { // 遍历data数组里的每个对象(这里只有一个) "code": "&1.detail.*.code", // 将code赋值给detail数组每个元素对应的code字段 "detail": { "*": { // 遍历detail数组里的每个num对象 "@": "[&3]" // 将当前的num对象放到新数组的对应位置,&3指向最外层data数组的索引,最终形成数组 } } } } } } ]
关键步骤解释
"code": "&1.detail.*.code":这里的&1代表当前层级(data数组的元素层级),我们把code的值映射到该元素下detail数组的每一个元素的code字段上,相当于给每个num对象都带上对应的code。"@": "[&3]":&3是回溯到最外层data数组的索引(从detail的元素往上数3层:detail元素 → detail数组 → data元素 → data数组),这样每个num对象(带上了刚才的code)都会被放到同一个数组里,就得到了你想要的结构。
如果你的data数组里有多个对象,这个Spec也能正常工作,每个对象的code会和自己的detail数组元素一一对应哦~
内容的提问来源于stack exchange,提问作者Pdeuxa
相关产品推荐
相关产品推荐

