Jolt Transform JSON 具有动态值的规格图

Jolt Transform JSON Spec map with dynamic values

我需要将下面的输入 JSON 转换为输出 JSON,但不确定如何为该输出编写规范。 比较 JOLT 转换中的字段值

这里是输入:

{
  "body": {
    "productConfigurations": [
      {
        "productConfiguration": {
          "selected": true,
          "productSpecification": {
            "id": "1776911"
          },
          "productOffering": {
            "id": "1777341"
          }
        }
      },
      {
        "productConfiguration": {
          "selected": true,
          "productSpecification": {
            "id": "247541"
          },
          "productOffering": {
            "id": "735501"
          }
        }
      },
      {
        "productConfiguration": {
          "productSpecification": {
            "id": "280801"
          },
          "productOffering": {
            "id": "735501"
          }
        }
      }
    ]
  }
}

预期输出: 我需要在输入 JSON 下方转换为输出 JSON 并且不确定如何为该输出编写规范。比较 JOLT 转换中的字段值。

{
  "body": [
    {
      "id": "1777341",
      "products": [
        {
          "id": "1776911"
        }
      ]
    },
    {
      "id": "735501",
      "products": [
        {
          "id": "247541"
        },
        {
          "id": "280801"
        }
      ]
    }
  ]
}

您可以使用以下连续移位变换

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "*": {
            "*": {
              "productSpecification": {
                "id": "@(2,productOffering.&).products[].&"
              }
            }
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "$": "&1.id",
        "*": "&1.&"
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": "body[]"
    }
  }
]

主要思想是通过使用嵌套在 "productSpecification" 标记对象中的 "id": "@(2,productOffering.&).products[].&" 来确定 productOffering 属性的公共 id 值。