【问题标题】:NiFi - Convert comma delimited string in json to arrayNiFi - 将 json 中的逗号分隔字符串转换为数组
【发布时间】:2020-07-09 15:34:47
【问题描述】:

我正在寻找一种将 json 中的逗号分隔字符串转换为 NiFi 中的数组的方法。

那么数组的长度是可变的。我现在已经尝试了一些东西,包括使用 jolt 转换器,但是带有 nifi 的 jolt 版本不支持拆分。

我的流程文件如下所示:

{
  "arrStr": "abc,def,hij",
  "something": "else"
}

我正在尝试将其转换为:

{
  "arrStr": ["abc", "def", "hij"],
  "something": "else"
}

7/10 更新:

对不起,应该包括我使用的是 nifi 版本 1.7.1,我认为它有 jolt 版本 0.1.0。

【问题讨论】:

  • 你可以使用脚本 - groovy, python, ...
  • @daggett - 是的,这是真的。我可能会尝试一下。

标签: json apache-nifi jolt


【解决方案1】:

这行得通

“拆分”单元测试用例 https://github.com/bazaarvoice/jolt/blob/7812399d1c955742d81eae363244a2d0ef86cf3b/jolt-core/src/test/resources/json/modifier/functions/stringsSplitTest.json

[
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "arrStr": "=split(',',@(1,arrStr))"
    }
  }
]

【讨论】:

  • 所以我用的nifi自带的震动是0.1.0版本,好像不支持拆分操作。
【解决方案2】:

感谢@daggett 对 groovy 的评论。我选择了那条路线,这真的很容易做到。我必须使用 ExecuteScript 处理器,而不是 ExecuteGroovy 处理器,因为 ExecuteGroovy 处理器没有加载我想使用的 IOUtils。

import groovy.json.JsonBuilder
import groovy.json.JsonSlurper
import org.apache.commons.io.IOUtils

import java.nio.charset.StandardCharsets

def flowFile = session.get();
if (flowFile == null) {
    return;
}

flowFile = session.write(flowFile,
        { inputStream, outputStream ->
            def content = IOUtils.toString(inputStream, java.nio.charset.StandardCharsets.UTF_8)

            def slurped = new JsonSlurper().parseText(content)
            def builder = new JsonBuilder(slurped)
            
            builder.content.arrStr = builder.content.arrStr.split(',')
            
            outputStream.write(builder.toPrettyString().getBytes(StandardCharsets.UTF_8))
        } as StreamCallback)
        
session.transfer(flowFile, ExecuteScript.REL_SUCCESS)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-18
    • 2021-12-18
    • 2021-08-09
    • 2019-11-12
    • 1970-01-01
    • 2021-12-06
    相关资源
    最近更新 更多