Jolt Transform:合并具有超过 1 个相似字段和 2 个不同字段的对象

Jolt Transform: Merging objects with more than 1 similar fields and 2 dissimilar fields

我遇到了类似的问题:
我想转换以下输入:

[
  {
    "name": "Product A",
    "price": 10,
    "color": "green",
    "category": "fruit",
    "id": 1
  },
  {
    "name": "Product A",
    "price": 20,
    "color": "yellow",
    "category": "fruit",
    "id": 1
  },
  {
    "name": "Product B",
    "price": 30,
    "color": "blue",
    "category": "vegetable",
    "id": 2
  }
]

进入此输出:

[
 "product_1" :  {
    "name": "Product A",
    "price": [10,20],
    "color": ["green", "yellow"],
    "category": "fruit",
    "id": 1
  },
 "product_2" :  {
    "name": "Product B",
    "price": 30,
    "color": "blue",
    "category": "vegetable",
    "id": 2
  }
]

在上面的输入中,前两个对象相似,具有相同的名称、类别和 ID,因此我将它们合并为 1 个对象。有 2 个不同的字段,即价格和颜色。所以我正在创建这些字段的数组并将它们放入合并的对象中。

我尝试了以下方法:

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "id": {
          "*": {
            "@2": "&[]"
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        // "*": {
        //  "price": "product_&2.price",
        //  "color": "product_&2.color"
        // }
        //,
        "0": {
          "name": "product_&2.name",
          "category": "product_&2.category",
          "id": "product_&2.id"
        }
      }
    }
  }
]

但是我要么可以得到不同字段的数组,要么可以得到具有相似字段的对象。但是我没有让两者同时工作。

双重shift转换可能会被应用:在第一步;具有公共 id 值的对象组合在公共数组元素中,并在第二个元素中;公共键的值组合在一起。但是,为了摆脱某些键的重复元素 (name,category & id 在这种情况下)例如

[
  {
    "operation": "shift",
    "spec": {
      "*": "@id"
    }
  },
  {
    "operation": "shift",
    "spec": {
      "1": {
        "*": {
          "*": "product_&2.&[]"
        }
      },
      "2": "product_&"
    }
  },
  {
    "operation": "cardinality",
    "spec": {
      "product_1": {
        "name": "ONE",
        "category": "ONE",
        "id": "ONE"
      }
    }
  }
]