Apache nifi 如何在Jolt转换规范中将对象添加到Json

Apache nifi 如何在Jolt转换规范中将对象添加到Json,apache-nifi,jolt,Apache Nifi,Jolt,在nifi中,我尝试使用可变数量的键转换JSON,但始终使用“日期”键。我想转换Json并将日期的字符串值更改为Json对象。然而,我没有得到我需要的。我可以使用哪个操作/规范来完成预期的输出。 输入: { “名称”:“val1”, “日期”:“2021-05-19T00:53:20+00:00” } 规格: [ { “操作”:“移位”, “规格”:{ @0:“包装器” } }, { “操作”:“默认值”, “规格”:{ “包装器”:{ “日期:{“$date”:“${date\u attr}

在nifi中,我尝试使用可变数量的键转换JSON,但始终使用“日期”键。我想转换Json并将日期的字符串值更改为Json对象。然而,我没有得到我需要的。我可以使用哪个操作/规范来完成预期的输出。 输入:

{
“名称”:“val1”,
“日期”:“2021-05-19T00:53:20+00:00”
}
规格:

[
{
“操作”:“移位”,
“规格”:{
@0:“包装器”
}
}, {
“操作”:“默认值”,
“规格”:{
“包装器”:{
“日期:{“$date”:“${date\u attr}”
}
}
}
]
预期产量

{
“包装器”:{
“名称”:“val1”,
“日期:{“$date”:“2021-05-19T00:53:20+00:00”}
}
}
我得到了什么

{
“包装器”:{
“名称”:“val1”,
“日期”:“2021-05-19T00:53:20+00:00”
}
}

对于
默认值
,如果规范中提到的键在输入json中丢失,则添加了该键,否则不会发生任何更改。 在这里,您试图将节点推到更高的级别,这可以通过创建和分配临时节点来实现

\\
是转义字符

[
  {
    "operation": "shift",
    "spec": {
      "date": "date1",
      "@0": "."
    }
  },
  {
    "operation": "remove",
    "spec": {
      "date": ""
    }
  }, {
    "operation": "shift",
    "spec": {
      "date1": "wrapper.date.\\$date",
      "@0": "wrapper"
    }
  }, {
    "operation": "remove",
    "spec": {
      "wrapper": {
        "date1": ""
      }
    }
  }
]

对于
$
运算符,只有一步shift转换以及转义字符(
\\\
)就足以使用

[
{
“操作”:“移位”,
“规格”:{
“name”:“wrapper.name”,
“日期”:“{(1,日期)”:“包装器和\\$date”}
}
}
]
我们将使用@(1,date)中的第一个参数1作为嵌套对象中的一个进行升级

编辑:考虑到您只需要覆盖属性日期,而不单独添加其他属性,请使用下面的方法,该方法同样只有一个移位转换步骤

[
{
“操作”:“移位”,
“规格”:{
“*”:“包装器和”,
“日期”:“{(1,日期)”:“包装器和\\$date”}
}
}
]

谢谢您的回答。这个看起来很整洁。我的要求之一是输入json中的属性列表是可变的。唯一必须的属性是日期。是否有方法包含所有属性并仅替换覆盖日期的值?