问题描述
{
"flu": "flu1","reportId": 11,"Name":"Transform"
}
预期输出:
{
"flu": "flu1","Name":"Transform","fullname":"flu1-11-Transform"
}
{
"type":"relationship","id":"flu1-11-Transform"
}
规格:
[{
"operation":"modify-default-beta","spec":{
"fullname": "=concat(@(1,flu),'-',@(1,reportId),Name))"
}
}]
上述规范适用于第一个 JSON 对象。是否可以创建两个 JSON 对象,如预期输出中所示?
解决方法
您只能使用 JOLT 输出一个顶级对象,但该对象可以是一个数组(您所需的输出不是有效的 JSON 原样)。如果你想要一个包含这些对象的二元素数组,你可以使用以下规范:
[{
"operation": "modify-default-beta","spec": {
"fullname": "=concat(@(1,flu),'-',@(1,reportId),Name))"
}
},{
"operation": "shift","spec": {
"*": "[0].&","@(1,fullname)": "[1].id","#relationship": "[1].type"
}
}]
如果您需要用空格分隔的两个 JSON 对象,因为您在此问题中标记了 Apache NiFi,您可以将 JoltTransformRecord 与 JsonRecordSetWriter 一起使用,该 JsonRecordSetWriter 的 Output Grouping
属性设置为 One Line Per Object
。格式不会与上面完全相同(每个对象都在一行上),但它将是由空格分隔的两个 JSON 对象(某些系统接受/期望这种格式)。