输出键为输入值的 Jolt shift 规范

Jolt shift spec where output key is input value

简化输入

{
  "controllerServiceReferencingComponents": [
    {
      "revision": {
        "version": 5
      },
      "component": {
        "id": "9c050865-6d3a-3bb4-1ec5-b02fdfb103d1"
      }
    },
    {
      "revision": {
        "version": 1
      },
      "component": {
        "id": "a6ac00ee-0173-1000-24c9-70d812e16108"
      }
    }
  ]
}

期望的输出

{
  "referencingComponentRevisions": {
    "9c050865-6d3a-3bb4-1ec5-b02fdfb103d1": {
      "version": 5
    },
    "a6ac00ee-0173-1000-24c9-70d812e16108": {
      "version": 1
    }
  }
}

基本上我想在输入中使用 controllerServiceReferencingComponents.component.idvalues 作为 referencingComponentRevisionskeys

我试过

的变化
[
  {
    "operation": "shift",
    "spec": {
      "controllerServiceReferencingComponents": {
        "*": {
          "component": {
            "id": "referencingComponentRevisions."
          },
          "revision": {
            "clientId": "referencingComponentRevisions.&.clientID"
          }
        }
      }
    }
  }
]

作为我的规范,但是,我最终得到了像

这样的输出
{
  "referencingComponentRevisions" : [ "9c050865-6d3a-3bb4-1ec5-b02fdfb103d1", "a6ac00ee-0173-1000-24c9-70d812e16108" ]
}

其中 referencingComponentRevisions 的值最终是一个数组而不是对象

FWIW 我正在尝试在 NiFi JoltTransformJSON 处理器中执行此操作

这适用于简单的转变,

[
  {
    "operation": "shift",
    "spec": {
      "controllerServiceReferencingComponents": {
        "*": {
          "component": {
            "@(1,revision.version)": "referencingComponentRevisions.@(1,id).version"
          }
        }
      }
    }
  }
]