Jolt 转换以使用 NiFi 将 json 内容放入字段中

Jolt transform to put the json content in a field using NiFi

我的JSON输入

[
  {
    "id": "1234",
    "Status": "null",
    "Expired": "null",
    "First_Name": "null"
  },
  {
    "id": "5678",
    "Status": "null",
    "Expired": "null",
    "First_Name": "null"
  }
]

我的 JOLT 规格

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "id": "[&1].id"
      }
    }
  },
  {
    "operation": "default",
    "spec": {
      "*": {
        "Status": "null",
        "Expired": "null",
        "First_Name": "null"
      }
    }
  }
]

输出:

[
  {
    "id": "1234",
    "First_Name": "null",
    "Expired": "null",
    "Status": "null"
  },
  {
    "id": "5678",
    "First_Name": "null",
    "Expired": "null",
    "Status": "null"
  }
]

预期输出:

{
  "isInput": true,
  "input": [
    {
      "id": "1234",
      "First_Name": "null",
      "Expired": "null",
      "Status": "null"
    },
    {
      "id": "5678",
      "First_Name": "null",
      "Expired": "null",
      "Status": "null"
    }
  ]
}

这可以使用 NiFi JoltTransform 完成吗JSON。就像将 json 内容放在“输入”字段中并添加另一个 isInput 键。 如果不是,我应该使用替换值

的 replaceText
{
  "isInput": true,
  "input": "${input}"
}

但是,我应该如何将 JoltTransform 的输出放入 ${input} 字段

您可以将以下两个规格添加到您的链中:

{
    "operation": "shift",
    "spec": {
      "isInput": "isInput",
      "*": "input[]"
    }
  },
  {
    "operation": "default",
    "spec": {
      "isInput": "true"
    }
  }

但仅使用此链规范更短:

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "id": "input[&1].id"
      }
    }
  },
  {
    "operation": "default",
    "spec": {
      "input[]": {
        "*": {
          "Status": "null",
          "Expired": "null",
          "First_Name": "null"
        }
      },
      "isInput": "true"
    }
  }

]

shift step一步就够了,比如

[
  {
    "operation": "shift",
    "spec": {
      "#true": "isInput",
      "@": "input"
    }
  }
]

其中 @ 签名键将复制当前级别的所有内容。