有没有办法在NiFi上的JoltTransformJSON处理器中转义管道字符(
|
)?
我有一个 Json,其中许多属性名称都具有该字符,我需要使用 JoltTransform 将其展平,但如果我在 JoltTransform 规范中使用管道字符,我会收到一条警告,指出该规范无效。当我用下划线替换所有
|
时,效果很好。
我想避免这种情况的一种方法是在 JoltTransform 处理器之前和之后使用 ReplaceText,但是有没有更方便的方法来做到这一点?
(当然,我尝试使用
\\
进行转义,但它不起作用,我收到了相同的警告。)
[更新] 这是输入 Json 的样子:
[
{
"root": "value",
"first|Level|Array": [
{
"firstLevel": [
"value1"
],
"second|Level|Array": [
{
"secondLevel": [
"value2"
]
},
{
"secondLevel": [
"value3"
]
}
]
}
]
}
]
这是预期的输出:
{
"root" : "value",
"first|Level|Array|firstLevel" : [ "value1" ],
"second|Level|Array[0]|secondLevel" : [ "value2" ],
"second|Level|Array[1]|secondLevel" : [ "value3" ]
}
还有我希望使用的 Jolt 规格:
[
{
"operation": "shift",
"spec": {
"*": {
"*": "&",
"first|Level|Array": {
"*": {
"*": "&2\\|&",
"second|Level|Array": {
"*": {
"*": "&2\\[&1\\]\\|&"
}
}
}
}
}
}
}
]
是的,您可以使用
\\
转义特殊字符,但请注意在 else情况下使用
"*"
通配符,例如
[
{
"operation": "shift",
"spec": {
"*": {
"root": "&",
"*": { //else case which represents "first|Level|Array"
"*": {
"f*": "&2\\|&",
"*": { //represents "second|Level|Array"
"*": {
"*": "&2\\[&1\\]\\|&"
}
}
}
}
}
}
}
]
网站上的演示使用 v0.1.1的 Jolt Transform 演示是: