使用JOLTTransformJSON NiFi进行JSON到JSON转换

deyfvvtc  于 2023-02-17  发布在  其他
关注(0)|答案(1)|浏览(176)

我正在Nifi中使用*JOLTTransformJson*处理器。
我的
输入
是:

[
  {
    "col_name": "time",
    "data_type": "timestamp",
    "is_nullable": true
  },
  {
    "col_name": "otherData",
    "data_type": "string",
    "is_nullable": false
  }
]

我正在使用以下规格

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "col_name": "name",
        "data_type": "type[0]",
        "is_nullable": {
          "true": "type[1]",
          "false": "type[1]"
        }
      }
    }
  },
  {
    "operation": "default",
    "spec": {
      "*": {
        "type[1]": "notnull"
      }
    }
  }
]

预期输出为:

{
  "type": "record",
  "name": "table_name",
  "fields": [
    {
      "name": "time",
      "type": [
        "timestamp",
        "null"
      ]
    },
    {
      "name": "otherData",
      "type": [
        "string",
        "notnull"
      ]
    }
  ]
}

但是通过组合数组中的所有值,将下面的值作为当前结果,如下所示:

{
  "name": [
    "time",
    "otherData"
  ],
  "type": [
    [
      "timestamp",
      "int"
    ],
    null
  ]
}

有人能帮帮我吗。

fnvucqvd

fnvucqvd1#

通过遍历数组的对象,您可以使用以下第一个shift转换规范,以便能够 * 重复 * 应用这些技术:

[
  {
    "operation": "shift",
    "spec": {
      "#record": "type", // fixed values formed by using # wildcards left-hand-side
      "#table_name": "name",
      "*": {
        "col_*": "fields[#2].&(0,1)", // replicate the 1st replacement of the asterisk from the current(0th) level
        "is_nullable": { // conditional logic starts here
          "@(1,data_type)": "fields[#3].type",
          "true": {
            "#null": "fields[#4].type"
          },
          "false": {
            "#notnull": "fields[#4].type"
          }
        }
      }
    }
  },
  { //to sort the attributes within the fields array
    "operation": "sort",
    "spec": {
      "fields": ""
    }
  },
  { //to sort whole result
    "operation": "shift",
    "spec": {
      "type": "&",
      "name": "&",
      "fields": "&"
    }
  }
]

第二个和第三个转换只是添加到排序所需属性/数组

相关问题