You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JOLT过滤JSON中CpmBannerCampaign.Settings数组指定对象?

问题描述

现有如下JSON数据:

{  
  "Id": 1124574,  
  "Name": "3Test_pro_RTB (dec)20 06",  
  "StartDate": "2024-12-09",  
  "CreateTime": "2024-06-20T18:23:11Z",  
  "Type": "CPM_BANNER_CAMPAIGN",  
  "Status": "DRAFT",  
  "State": "OFF",  
  "SourceId": null,  
  "Funds": {  
    "Mode": "SHARED_ACCOUNT_FUNDS",  
    "SharedAccountFunds": {  
      "Refund": 0,  
      "Spend": 0  
    }  
  },  
  "RepresentedBy": {  
    "Manager": null,  
    "Agency": "Havas Digital"  
  },  
  "CpmBannerCampaign": {  
    "BiddingStrategy": {  
      "Search": {  
        "BiddingStrategyType": "SERVING_OFF"  
      },  
      "Network": {  
        "BiddingStrategyType": "CP_MAXIMUM_IMPRESSIONS",  
        "CpMaximumImpressions": {  
          "StartDate": "2024-12-09",  
          "EndDate": "2024-12-15",  
          "AutoContinue": "NO",  
          "AverageCpm": 101000000,  
          "SpendLimit": 3000000000  
        }  
      }  
    },  
    "Settings": [  
      {  
        "Option": "ADD_METRICA_TAG",  
        "Value": "YES"  
      },  
      {  
        "Option": "ADD_OPENSTAT_TAG",  
        "Value": "NO"  
      },  
      {  
        "Option": "ADD_TO_FAVORITES",  
        "Value": "NO"  
      },  
      {  
        "Option": "DAILY_BUDGET_ALLOWED",  
        "Value": "YES"  
      },  
      {  
        "Option": "ENABLE_AREA_OF_INTEREST_TARGETING",  
        "Value": "NO"  
      },  
      {  
        "Option": "ENABLE_SITE_MONITORING",  
        "Value": "NO"  
      },  
      {  
        "Option": "REQUIRE_SERVICING",  
        "Value": "NO"  
      },  
      {  
        "Option": "SHARED_ACCOUNT_ENABLED",  
        "Value": "YES"  
      }  
    ],  
    "VideoTarget": "CLICKS",  
    "CounterIds": null,  
    "FrequencyCap": {  
      "Impressions": 3,  
      "PeriodDays": 30  
    }  
  }
}

需要保留JSON的全部内容,仅对CpmBannerCampaign.Settings数组进行过滤:仅保留数组中Option属性值为ADD_OPENSTAT_TAG, ADD_METRICA_TAG, ADD_TO_FAVORITES, ENABLE_AREA_OF_INTEREST_TARGETING, ENABLE_CURRENT_AREA_TARGETING, ENABLE_REGULAR_AREA_TARGETING, ENABLE_SITE_MONITORING, REQUIRE_SERVICING的对象,移除不符合条件的对象。

过滤后的Settings数组示例如下:

"Settings": [
    {
        "Option": "ADD_METRICA_TAG",
        "Value": "YES"
    },
    {
        "Option": "ADD_OPENSTAT_TAG",
        "Value": "NO"
    },
    {
        "Option": "ADD_TO_FAVORITES",
        "Value": "NO"
    },
    {
        "Option": "ENABLE_AREA_OF_INTEREST_TARGETING",
        "Value": "NO"
    },
    {
        "Option": "ENABLE_SITE_MONITORING",
        "Value": "NO"
    },
    {
        "Option": "REQUIRE_SERVICING",
        "Value": "NO"
    }
]

请问能否通过JOLT实现该过滤需求?


答案

可以通过JOLT实现这个过滤需求。下面是对应的JOLT规范:

[
  {
    "operation": "shift",
    "spec": {
      "*": "&", // 保留所有顶层字段
      "CpmBannerCampaign": {
        "*": "&1.&", // 保留CpmBannerCampaign下除Settings外的所有字段
        "Settings": {
          "*": {
            "Option": {
              // 匹配允许的Option值,符合条件的保留整个对象
              "ADD_OPENSTAT_TAG|ADD_METRICA_TAG|ADD_TO_FAVORITES|ENABLE_AREA_OF_INTEREST_TARGETING|ENABLE_CURRENT_AREA_TARGETING|ENABLE_REGULAR_AREA_TARGETING|ENABLE_SITE_MONITORING|REQUIRE_SERVICING": {
                "@2": "&3.&2" // 将符合条件的对象放入CpmBannerCampaign.Settings数组中
              }
            }
          }
        }
      }
    }
  }
]

说明

  • 使用shift操作重新构造JSON结构,保留所有不需要修改的字段;
  • 针对CpmBannerCampaign.Settings数组,通过匹配Option字段的允许值,仅保留符合条件的对象;
  • @2表示向上回溯两层获取当前的数组元素(即整个{Option:..., Value:...}对象),&3.&2表示将该对象放到CpmBannerCampaign.Settings对应的位置。

处理后的完整JSON结果

{
  "Id": 1124574,
  "Name": "3Test_pro_RTB (dec)20 06",
  "StartDate": "2024-12-09",
  "CreateTime": "2024-06-20T18:23:11Z",
  "Type": "CPM_BANNER_CAMPAIGN",
  "Status": "DRAFT",
  "State": "OFF",
  "SourceId": null,
  "Funds": {
    "Mode": "SHARED_ACCOUNT_FUNDS",
    "SharedAccountFunds": {
      "Refund": 0,
      "Spend": 0
    }
  },
  "RepresentedBy": {
    "Manager": null,
    "Agency": "Havas Digital"
  },
  "CpmBannerCampaign": {
    "BiddingStrategy": {
      "Search": {
        "BiddingStrategyType": "SERVING_OFF"
      },
      "Network": {
        "BiddingStrategyType": "CP_MAXIMUM_IMPRESSIONS",
        "CpMaximumImpressions": {
          "StartDate": "2024-12-09",
          "EndDate": "2024-12-15",
          "AutoContinue": "NO",
          "AverageCpm": 101000000,
          "SpendLimit": 3000000000
        }
      }
    },
    "Settings": [
      {
        "Option": "ADD_METRICA_TAG",
        "Value": "YES"
      },
      {
        "Option": "ADD_OPENSTAT_TAG",
        "Value": "NO"
      },
      {
        "Option": "ADD_TO_FAVORITES",
        "Value": "NO"
      },
      {
        "Option": "ENABLE_AREA_OF_INTEREST_TARGETING",
        "Value": "NO"
      },
      {
        "Option": "ENABLE_SITE_MONITORING",
        "Value": "NO"
      },
      {
        "Option": "REQUIRE_SERVICING",
        "Value": "NO"
      }
    ],
    "VideoTarget": "CLICKS",
    "CounterIds": null,
    "FrequencyCap": {
      "Impressions": 3,
      "PeriodDays": 30
    }
  }
}

内容的提问来源于stack exchange,提问作者Mark Avreliy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 12:06:08