NiFi - Преобразование строки с разделителями-запятыми в json в массив - PullRequest
1 голос
/ 09 июля 2020

Я ищу способ преобразовать строку с разделителями-запятыми в json в массив в NiFi.

Тогда длина массива является переменной. Я пробовал сейчас несколько вещей, в том числе с помощью трансформатора толчка, но версия толчка с nifi не поддерживает разделение.

Мой файл потока выглядит так:

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

И Я пытаюсь преобразовать его в:

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

Обновление 7/10:

Извините, я должен был включить, что я использую nifi версии 1.7.1, которая Думаю есть jolt версия 0.1.0.

Ответы [ 2 ]

0 голосов
/ 10 июля 2020

Крик @daggett за комментарий по поводу groovy. Я пошел по этому пути, и это действительно легко сделать. Мне пришлось использовать процессор ExecuteScript, а не процессор Execute Groovy, поскольку процессор Execute Groovy не загружал 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)

0 голосов
/ 10 июля 2020

Это работает

"разделенный" модульный тестовый пример 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))"
    }
  }
]
...