如何使用Jolt过滤JSON数组中的指定元素并保留特定字段?
如何使用Jolt过滤JSON数组中的指定元素并保留特定字段?
当然可以实现你的需求!我来帮你调整Jolt转换规则,精准过滤数组元素并保留你需要的字段。
你的核心需求是:
- 过滤
audit_pixels数组,只保留role值为originalShow的元素 - 去掉元素中的
id、parent_id字段,仅保留audit_pixel和role
正确的Jolt转换规则
[ { "operation": "shift", "spec": { "id": "id", "status": "status", "audit_pixels": { "*": { "role": { "originalShow": { "@(1,audit_pixel)": "audit_pixels[#2].audit_pixel", "@": "audit_pixels[#2].role" } } } } } } ]
规则逻辑解释
我们一步一步拆解这个转换逻辑:
- 保留顶层字段:直接将输入的
id和status映射到结果的同名字段,确保这两个字段不丢失。 - 遍历数组元素:用
"*"遍历audit_pixels数组的每一个元素。 - 过滤并保留目标元素:
- 只匹配
role值为originalShow的元素,其他值(包括null)会因为没有对应的映射规则自动被过滤。 @(1,audit_pixel):向上一级(当前数组元素)获取audit_pixel字段的值,映射到结果数组对应位置的audit_pixel字段。@:代表当前role字段的值,直接映射到结果数组对应位置的role字段。[#2]:用来生成结果数组的索引,确保过滤后的元素按原顺序排列。
- 只匹配
转换效果
用你提供的输入JSON运行这个规则后,会得到你预期的结果:
{ "id": 313, "status": "blocked", "audit_pixels": [ { "audit_pixel": "1087125871&ord={{random}}", "role": "originalShow" }, { "audit_pixel": "cid1115596-posid2396249", "role": "originalShow" } ] }
你原来规则的问题说明
你之前的规则逻辑绕了弯路:
- 试图处理
null值来排除元素,其实不需要,只要只匹配我们需要的originalShow即可,不符合的元素自然不会被映射到结果中。 - 错误地保留了
id字段,并且映射路径不正确,导致无法得到预期的字段结构。
备注:内容来源于stack exchange,提问作者fujidaon
相关产品推荐
相关产品推荐

