如何在 Jolt 变换规范中将对象添加到 Json
How to add a object to a Json in a Jolt Transform spec
在 nifi 中,我试图用可变数量的键转换 JSON,但总是有一个“日期”键。我想转换 Json 并将日期的字符串值更改为 json 对象。但是我没有得到我需要的东西。我可以使用哪个 operation/spec 来完成预期的输出。
输入:
{
"name": "val1",
"date": "2021-05-19T00:53:20+00:00"
}
规格:
[
{
"operation": "shift",
"spec": {
"@0": "wrapper"
}
}, {
"operation": "default",
"spec": {
"wrapper": {
"date": { "$date": "${date_attr}" }
}
}
}
]
预期输出
{
"wrapper": {
"name": "val1",
"date": {"$date": "2021-05-19T00:53:20+00:00"}
}
}
我得到了什么
{
"wrapper": {
"name": "val1",
"date": "2021-05-19T00:53:20+00:00"
}
}
在 default
的情况下,如果规范中提到的键在输入 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 转换以及 $
运算符的转义字符 (\
) 就足以使用,例如
[
{
"operation": "shift",
"spec": {
"name": "wrapper.name",
"date": { "@(1,date)": "wrapper.&.\$date" }
}
}
]
我们要去哪里 一个 通过使用第一个参数 1 在 @(1,date ) 一直停留在嵌套对象中
Edit : 考虑到你只需要覆盖 date 属性,其他的不用单独添加,使用以下再次只有一步 shift transformation
[
{
"operation": "shift",
"spec": {
"*": "wrapper.&",
"date": { "@(1,date)": "wrapper.&.\$date" }
}
}
]
在 nifi 中,我试图用可变数量的键转换 JSON,但总是有一个“日期”键。我想转换 Json 并将日期的字符串值更改为 json 对象。但是我没有得到我需要的东西。我可以使用哪个 operation/spec 来完成预期的输出。 输入:
{
"name": "val1",
"date": "2021-05-19T00:53:20+00:00"
}
规格:
[
{
"operation": "shift",
"spec": {
"@0": "wrapper"
}
}, {
"operation": "default",
"spec": {
"wrapper": {
"date": { "$date": "${date_attr}" }
}
}
}
]
预期输出
{
"wrapper": {
"name": "val1",
"date": {"$date": "2021-05-19T00:53:20+00:00"}
}
}
我得到了什么
{
"wrapper": {
"name": "val1",
"date": "2021-05-19T00:53:20+00:00"
}
}
在 default
的情况下,如果规范中提到的键在输入 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 转换以及 $
运算符的转义字符 (\
) 就足以使用,例如
[
{
"operation": "shift",
"spec": {
"name": "wrapper.name",
"date": { "@(1,date)": "wrapper.&.\$date" }
}
}
]
我们要去哪里 一个 通过使用第一个参数 1 在 @(1,date ) 一直停留在嵌套对象中
Edit : 考虑到你只需要覆盖 date 属性,其他的不用单独添加,使用以下再次只有一步 shift transformation
[
{
"operation": "shift",
"spec": {
"*": "wrapper.&",
"date": { "@(1,date)": "wrapper.&.\$date" }
}
}
]