Изменить значения атрибута JSON в Apache Nifi - PullRequest
0 голосов
/ 03 июля 2018

У меня есть атрибут STATUS в формате JSON, а именно:

{  
   "id":"343533",
   "status":false,
   "itemSize":0
}

Мне бы хотелось иметь возможность изменять значение itemSize через скрипт Groovy Execute, прежде чем оно будет передано на другой пользовательский процессор. Я изо всех сил пытаюсь найти способ исключительно изменить значение для такой пары ключ-значение. Я хотел бы иметь возможность сделать что-то похожее на следующее, где я перебираю все пары ключ-значение, и если ключ имеет нулевое значение, то заменяю его на любое числовое значение. Однако приведенный ниже пример работает только с атрибутами верхнего уровня и не позволяет изменять или удалять конкретную пару ключ-значение в значении атрибута.

def flowFile=session.get()
if(!flowFile)return
def zeroValueAttr = flowFile.getAttributes().findAll{it.value==0}.collect{it.key}
flowFile.removeAllAttributes(zeroValueAttr )
session.transfer(flowFile, REL_SUCCESS)

Можешь помочь?

спасибо

1 Ответ

0 голосов
/ 03 июля 2018

следующий код для ExecuteGroovyScript процессора

import groovy.json.JsonSlurper
import groovy.json.JsonBuilder

def ff=session.get()
if(!ff)return

//read flow file content and parse it
def body = ff.read().withReader("UTF-8"){reader-> 
    new JsonSlurper().parse(reader) 
}

//replace some values
body.each{
    if(it.value==0)it.value=123
}

//write new flow file content
ff.write("UTF-8"){writer-> 
    new JsonBuilder(body).writeTo(writer) 
}
//transfer
REL_SUCCESS << ff
...