过滤数组内的对象

问题描述 投票:0回答:1

我的 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
内部我需要过滤数组。在
Settings
内部我们可以看到多个物体。对象包含两个属性:
Option
Value
。我应该抓取
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
。如果不等于,那么我应该从数组中删除这个对象。

所以对于我的 JSON

Settings
应该是这样的:

...//other part of JSON
"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
1个回答
0
投票

您可以在这些对象的叶节点的右侧添加

Option
前缀后形成一个管道分隔键,以便通过
@1,Option
进行过滤,例如

[
  {
    "operation": "shift",
    "spec": {
      "*": "&", //the elements other than "CpmBannerCampaign"
      "CpmBannerCampaign": {
        "*": "&1.&", //the elements other than "Settings"
        "Settings": {
          "*": {
            "*": "&3.&2.@1,Option.&"
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": "&",
      "CpmBannerCampaign": {
        "*": "&1.&",
        "Settings": {
          "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": {
            "*": "&3.&2[#2].&"
          }
        }
      }
    }
  }
]
© www.soinside.com 2019 - 2024. All rights reserved.