通过具有不同名称的属性进行 JOLT 转换

JOLT shift through properties with different names

我有一个 JSON:

{
  "relations": {
    "advertiser_id": {
      "9968": {
        "name": "Advance/Unicredit",
        "id": 9968
      },
      "10103": {
        "name": "Advance/ ORIMI",
        "id": 10103
      }
    },
    "campaign_id": {
      "256292": {
        "name": "Interests_Aidata",
        "id": 256292,
        "advertiser_id": 9968
      },
      "257717": {
        "name": "G_14.04",
        "id": 257717,
        "advertiser_id": 10103
      }
    }
  }
}

我认为这是一个简单的移位操作,但由于 random 属性 中的所有值,我被卡住了 "9968": 我不知道不明白如何通过这些不同的属性名称移动 json。

预期输出:

[
  {
    "name": "Interests_Aidata",
    "id": 256292,
    "advertiser_id": 9968
  },
  {
    "name": "G_14.04",
    "id": 257717,
    "advertiser_id": 10103
  }
]

更新

是否可以添加顶级(在 relations 下)advertiser_idcampaign_id 作为示例中的附加属性?

[
  {
    "name": "Interests_Aidata",
    "id": 256292,
    "advertiser_id": 9968,
    "entity_type": "campaign_id"
  },
  {
    "name": "G_14.04",
    "id": 257717,
    "advertiser_id": 10103,
    "entity_type": "campaign_id"
  }
]

如果您的目标是在这些属性(advertiser_idcampaign_id)下累积每个对象数组,则使用以下规范

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "*": {
            "@": "&2"
          }
        }
      }
    }
  }
]

如果您只对最近编辑的 campaign_id 下的内容感兴趣,请使用

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "campaign_id": {
          "*": {
            "@": ""
          }
        }
      }
    }
  }
]

以下规格可以使用上次更新确定的所需结果

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "campaign_id": {
          "*": {
            "*": "[#2].&",
            "": "[#2].entity_type"
          }
        }
      }
    }
  }
]