2

使用 Apache NiFi,我想根据其他两个字段的连接向 JSON 流文件中的所有元素添加一个新字段。我正在尝试为此使用JoltTransformJSON处理器,但是,我想使用的 Jolt 变换使用在线工具可以正常工作,但在 NiFi 中不起作用。我怀疑是版本问题,但我的 Jolt 规范可能有些愚蠢。

输入 JSON 看起来像这样......

[
  {
    "id": 485842,
    "cc": 1,
    "x": 0,
    "y": null
  },
  {
    "id": 281733,
    "cc": 1,
    "x": 0,
    "y": 10
  },
  {
    "id": 721412,
    "cc": 12,
    "x": 0,
    "y": null
  }
]

我想要的输出是这个......

[ {
  "id" : 485842,
  "cc" : 1,
  "x" : 0,
  "y" : null,
  "id_cc" : "485842_1"
}, {
  "id" : 281733,
  "cc" : 1,
  "x" : 0,
  "y" : 10,
  "id_cc" : "281733_1"
}, {
  "id" : 721412,
  "cc" : 12,
  "x" : 0,
  "y" : null,
  "id_cc" : "721412_12"
} ]

我在在线网站上使用的 Jolt 变换是……

[{
  "operation": "modify-default-beta",
  "spec": {
    "*": {
      "id_cc": "=concat(@(1,id),'_',@(1,cc))"
    }
  }
}]

在 NiFi 中,我将JoltTransformJSON处理器配置为具有Modify-Default并使用这个稍微修改过的 Jolt 规范......

{
    "operation": "modify-default",
    "spec": {
      "*": {
        "id_cc": "=concat(@(1,id),'_',@(1,cc))"
      }
    }
}

NiFi 验证此 OK 并运行该过程。输出 JSON 仅包含一条记录,并像这样添加一个新字段

"operation": "modify-default"

是否有可以解决此问题的修改默认操作的快速修复方法,或者是否有更简单的方法使用移位操作?

在此先感谢您的任何指点。

4

1 回答 1

3

在同事的一些帮助下,我找到了一种方法来完成这项工作。

首先,将处理器的Jolt Transformation DSL属性设置为。JoltTransformJSONChain

其次,将 Jolt 规范设置为以下...

[{
    "operation": "modify-default-beta",
    "spec": {
      "*": {
        "id_cc": "=concat(@(1,id),'_',@(1,cc))"
      }
    }
}]

[]就像在操作中一样重要beta

第三,确保输入 Jolt 处理器的 JSON 是一个数组。

正确处理所有这些,就会产生预期的输出。

于 2017-11-23T23:27:00.497 回答