在Apache NiFi中支持JSON Jolt中的concat

时间:2017-11-23 00:43:32

标签: json apache-nifi jolt

使用Apache NiFi我想基于两个其他字段的串联为JSON流文件中的所有元素添加一个新字段。我正在尝试使用<form id='form1'> <select id="options" multiple > <option value="action">Action</option> <option value="animation">Animation</option> <option value="children">Children</option> <option value="classics">Classics</option> <option value="comedy">Comedy</option> <option value="documentary">Documentary</option> <option value="drama">Drama</option> <option value="family">Family</option> <option value="foreign">Foreign</option> <option value="games">Games</option> <option value="horror">Horror</option> <option value="music">Music</option> <option value="new">New</option> <option value="scifi">Sci-Fi</option> <option value="sports">Sports</option> <option value="travel">Travel</option> </select> </form>处理器,但是,我想使用的Jolt变换可以使用在线tools工作正常,但在NiFi中不起作用。我怀疑版本问题,但我的Jolt规范可能有些愚蠢。

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

JoltTransformJSON

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

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

我在网上site使用的Jolt变换是......

[ {
  "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"
} ]

在NiFi中,我将[{ "operation": "modify-default-beta", "spec": { "*": { "id_cc": "=concat(@(1,id),'_',@(1,cc))" } } }] 处理器配置为JoltTransformJSON,我使用这个稍微修改过的Jolt规范......

Modify-Default

NiFi验证此操作正常并且该过程运行。输出JSON仅包含一个记录,并添加了一个新字段

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

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

提前感谢任何指示。

1 个答案:

答案 0 :(得分:2)

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

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

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

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

[]与操作中的beta一样至关重要。

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

获取所有这些正确的信息并生成预期的输出。