使用 apache nifi 进行 json 键转换
Do json key transformation with apache nifi
我需要在 apache nifi 中进行 json 转换。有效负载中的 json 键将动态生成。
例如,在下面给出的输入中,'customer' 具有属性 'fname' 和 'lname '.我需要更改此 'fname' -> 'firstname' 和 'lname' -> ' lastname' 在'mappingvalues'中提供。
由于我是nifi新手。我不知道从哪里开始。我已经尝试了一些 json 变压器,例如 jolt。但是没有达到预期的效果。
我使用的颠簸变换如下:
[
{
"operation": "shift",
"spec": {
"customer": {
"*": {
"@": "&"
}
}
}
}
]
产生了输出
{
"fname" : "akhil",
"lname" : "kumar"
}
我需要实现的输入和预期输出如下:
{
"customer": {
"fname": "akhil",
"lname": "kumar",
.
.
.
},
"mappingvalues": {
"fname": "firstname",
"lname": "lastname",
.
.
.
}
}
##OUTPUT
{
"customer": {
"firstname": "akhil",
"lastname": "kumar",
.
.
.
}
}
*有没有办法在使用或不使用摇晃变换的情况下在 nifi 中实现相同的效果?是否可以用 groovy 脚本做同样的事情? *
请帮助我。
groovy中的代码递归映射:
import groovy.json.JsonSlurper
def ff = session.get()
if(!ff)return
def json = ff.read().withReader("UTF-8"){r-> new JsonSlurper().parse(r) }
def mappings = json.remove('mappingvalues')
def mapper(o, mappings){
if(o instanceof Map){
//json object. let's iterate it and do mapping
o = o.collectEntries{k,v-> [ (mappings[k] ?: k), mapper(v,mappings) ] }
}else if(o instanceof List){
//map elements in array
o = o.collect{v-> mapper(v,mappings) }
}
return o
}
json = mapper(json,mappings)
ff.write("UTF-8"){w-> new JsonBuilder(json).writeTo(w) }
REL_SUCCESS << ff
我需要在 apache nifi 中进行 json 转换。有效负载中的 json 键将动态生成。 例如,在下面给出的输入中,'customer' 具有属性 'fname' 和 'lname '.我需要更改此 'fname' -> 'firstname' 和 'lname' -> ' lastname' 在'mappingvalues'中提供。
由于我是nifi新手。我不知道从哪里开始。我已经尝试了一些 json 变压器,例如 jolt。但是没有达到预期的效果。
我使用的颠簸变换如下:
[
{
"operation": "shift",
"spec": {
"customer": {
"*": {
"@": "&"
}
}
}
}
]
产生了输出
{
"fname" : "akhil",
"lname" : "kumar"
}
我需要实现的输入和预期输出如下:
{
"customer": {
"fname": "akhil",
"lname": "kumar",
.
.
.
},
"mappingvalues": {
"fname": "firstname",
"lname": "lastname",
.
.
.
}
}
##OUTPUT
{
"customer": {
"firstname": "akhil",
"lastname": "kumar",
.
.
.
}
}
*有没有办法在使用或不使用摇晃变换的情况下在 nifi 中实现相同的效果?是否可以用 groovy 脚本做同样的事情? * 请帮助我。
groovy中的代码递归映射:
import groovy.json.JsonSlurper
def ff = session.get()
if(!ff)return
def json = ff.read().withReader("UTF-8"){r-> new JsonSlurper().parse(r) }
def mappings = json.remove('mappingvalues')
def mapper(o, mappings){
if(o instanceof Map){
//json object. let's iterate it and do mapping
o = o.collectEntries{k,v-> [ (mappings[k] ?: k), mapper(v,mappings) ] }
}else if(o instanceof List){
//map elements in array
o = o.collect{v-> mapper(v,mappings) }
}
return o
}
json = mapper(json,mappings)
ff.write("UTF-8"){w-> new JsonBuilder(json).writeTo(w) }
REL_SUCCESS << ff