JOLT转换需求:将对象属性复制到数组元素并展开为新数组
JOLT转换规则实现数组元素属性复制
输入JSON
[ { "id": "0", "bucket_attr1": "test1", "buckets": ["abc", "def", "mhf"] }, { "id": "1", "bucket_attr1": "test2", "buckets": ["abc", "ghi"] } ]
期望输出JSON
[ { "bucket_id": "abc", "bucket_attr1": "test1", "id": "0" }, { "bucket_id": "def", "bucket_attr1": "test1", "id": "0" }, { "bucket_id": "mhf", "bucket_attr1": "test1", "id": "0" }, { "bucket_id": "abc", "bucket_attr2": "test2", "id": "1" }, { "bucket_id": "ghi", "bucket_attr2": "test2", "id": "1" } ]
正确JOLT转换规则
[ { "operation": "shift", "spec": { "*": { "buckets": { "*": { "@2,id": "[&3].id", "@2,bucket_attr1": "[&3].bucket_attr1", "@": "[&3].bucket_id" } } } } }, { "operation": "modify-overwrite-beta", "spec": { "*": { "bucket_attr2": "=ifElse(@(1,id) == '1', @(1,bucket_attr1), '')", "bucket_attr1": "=ifElse(@(1,id) == '0', @(1,bucket_attr1), '')" } } }, { "operation": "remove", "spec": { "*": { "bucket_attr1": { "": "" }, "bucket_attr2": { "": "" } } } } ]
规则说明
- Shift操作:遍历输入数组的每个对象,将
buckets数组的元素逐个展开为独立对象,同时向上两级(@2)提取当前对象的id和bucket_attr1属性,将buckets元素值赋值给bucket_id。 - Modify操作:通过
ifElse判断id值,为id=1的对象生成bucket_attr2属性并赋值为原bucket_attr1的值,同时保留id=0对象的bucket_attr1。 - Remove操作:清除空值属性,保证输出结构干净整洁。
内容的提问来源于stack exchange,提问作者Shashi Kiran GM
相关产品推荐
相关产品推荐

