Nifi 逃生管道角色 Jolt Transform

问题描述 投票:0回答:1

有没有办法在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\\]\\|&"
              }
            }
          }
        }
      }
    }
  }
]
apache-nifi jolt
1个回答
0
投票

是的,您可以使用

\\
转义特殊字符,但请注意在
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 演示是:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.