ApacheNIFI:UpdateRecord替换子值

ApacheNIFI:UpdateRecord替换子值,apache,replace,apache-nifi,Apache,Replace,Apache Nifi,我试图使用UpdateRecord 1.9.0处理器修改JSON,但它并没有按照我的要求替换这些值 这是源消息 { "type": "A", "ids": [{ "id": "1", "value": "abc" }, { "id": "2", "value": "def" }, { "id": "3",

我试图使用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",
        }
    ]
}
我已经按照如下方式配置了处理器

读者:

架构注册表:

作者:

它可以工作,输出是一个JSON,没有字段“type”,id有字段“userId”,而不是“id”和“value”

为了填充userId的值,我定义了替换策略和要替换的属性:

但结果是错误的。用户id始终由数组中最后一个元素的id填充:

{
    "ids": [{
            "userId": "3"
        }, {
            "userId": "3"
        }, {
            "userId": "3"
        }
    ]
}
我认为表达式的值是可以的,因为如果我尝试只替换一条记录,它就可以正常工作(
/ids[0]/userId,…id

Nifi文档有一个非常类似的示例(示例3):

但这对我不起作用

我做错了什么


谢谢

最后,我使用了JoltJSONTransform处理器,而不是UpdateRecord

模板:

[
    {
        "operation": "shift",
        "spec": {
            "ids":{
                "*":{
                    "id": "ids[&1].userId"
                }
            }
        }
    }
]
比更新记录更容易