我正在尝试使用UpdateRecord 1.9.0处理器来修改JSON,但是它并不能替换我想要的值。
这是源消息
{
"type": "A",
"ids": [{
"id": "1",
"value": "abc"
}, {
"id": "2",
"value": "def"
}, {
"id": "3",
"value": "ghi"
}
]
}
和所需的输出
{
"ids": [{
"userId": "1",
}, {
"userId": "2",
}, {
"userId": "3",
}
]
}
我已按以下方式配置了处理器 processor config
读者: reader
架构注册表: schema
作家: writer
它起作用了,输出是一个没有字段'type'的JSON,并且id具有字段'userId'而不是'id'和'value'。
要填充userId的值,我定义了替换策略和要替换的属性: strategy
但是输出错误。 userId始终用数组中最后一个元素的ID填充:
{
"ids": [{
"userId": "3"
}, {
"userId": "3"
}, {
"userId": "3"
}
]
}
我认为表达式的值还可以,因为如果我尝试只替换一条记录,它就可以正常工作(/ids[0]/userId, ..id
)
Nifi文档有一个非常相似的示例(示例3): https://nifi.apache.org/docs/nifi-docs/components/org.apache.nifi/nifi-standard-nar/1.7.1/org.apache.nifi.processors.standard.UpdateRecord/additionalDetails.html
但这对我不起作用。
我在做什么错了?
谢谢
答案 0 :(得分:1)
最后,我使用JoltJSONTransform处理器而不是UpdateRecord
模板:
[
{
"operation": "shift",
"spec": {
"ids":{
"*":{
"id": "ids[&1].userId"
}
}
}
}
]
比UpdateRecord更容易