JOLT配置修正:JSON广告数据筛选与结构转换问题
修正后的JOLT配置方案
最终JOLT转换规则
[ { "operation": "shift", "spec": { "result": { "Ads": { "*": { "AdGroupId": "[&1].AdGroupId", "CpmBannerAdBuilderAd": { "Creative": { "CreativeId": "[&3].CpmBannerAdBuilderAd.Creative.CreativeId" } }, "CpmVideoAdBuilderAd": { "Creative": { "CreativeId": "[&3].CpmVideoAdBuilderAd.Creative.CreativeId" } } } } } } }, { "operation": "remove", "spec": { "*": { "*": null } } } ]
配置说明
Shift 操作(核心提取)
- 定位到
result.Ads数组,遍历每个广告元素(*) - 直接保留
AdGroupId字段到结果数组的对应位置 - 针对
CpmBannerAdBuilderAd和CpmVideoAdBuilderAd两个节点,显式保留原始节点名称,仅提取其内部Creative下的CreativeId字段,过滤掉其他冗余内容 [&3]用于回溯到数组元素的层级,确保字段映射到正确的位置
- 定位到
Remove 操作(清理null值)
- 遍历结果数组中的所有元素,移除所有值为
null的键,彻底清理无效数据
- 遍历结果数组中的所有元素,移除所有值为
输入输出示例
输入JSON
{ "result": { "Ads": [ { "AdGroupId": "ad_group_001", "CpmBannerAdBuilderAd": { "Creative": { "CreativeId": "creative_banner_001", "Width": null, "Height": 300 }, "Status": null }, "TempField": null }, { "AdGroupId": "ad_group_002", "CpmVideoAdBuilderAd": { "Creative": { "CreativeId": "creative_video_001", "Duration": null } }, "ExtraField": "useless_value" } ] } }
输出JSON
[ { "AdGroupId": "ad_group_001", "CpmBannerAdBuilderAd": { "Creative": { "CreativeId": "creative_banner_001" } } }, { "AdGroupId": "ad_group_002", "CpmVideoAdBuilderAd": { "Creative": { "CreativeId": "creative_video_001" } } } ]
针对原问题的修复点
- 保留原Cpm节点名称:通过显式指定
CpmBannerAdBuilderAd和CpmVideoAdBuilderAd作为目标键名,避免了通配符替换导致的名称丢失问题 - 正确筛选Creative字段:Shift操作仅提取
Creative.CreativeId,其他字段被自动过滤,无需额外处理
内容的提问来源于stack exchange,提问作者Mark Avreliy
相关产品推荐
相关产品推荐

