关于unescapeJson的apache-nifi问题

时间:2017-01-08 06:19:50

标签: apache-nifi

我正在使用apache nifi来转换一些数据。

我有一个字符串:他没有说,\“S \\\”top!\“ unescapeJson()给我这个结果:<他没有说,“S”顶!“

是吗?我的预期结果是他没有说,“S”顶部!“

如果该功能是为此而设计的,那么我怎样才能得到预期的结果。

示例:

input and output of ReplaceText

setting of ReplaceText

GetFile处理器只读了一个包含内容的文件:他没说,“S \\\”top!\“

1 个答案:

答案 0 :(得分:2)

通过将ReplaceText 替换值属性更改为${'$1'},似乎可以解决此问题。在我的示例中,这产生了所需的输出He didn't say, "S\"top!"

我还不完全理解为什么,但我认为它与将搜索的输出评估为替换的正则表达式相关,其中在应用unescapeJson()之前评估反斜杠,因此它最终成为多余的。例如,如果将替换值设置为$1,则不会发生这种情况。

<强>更新

我上面的订单错了,解决顺序如下:

  1. 搜索返回:He didn’t say, \"S\\\"top!\"
  2. 表达式语言将${'$1':unescapeJson()}评估为:He didn’t say, "S\"top!"
  3. 替换结果为:He didn’t say, "S"top!"
  4. 所以unescapeJson()按预期工作,你不期望的行为是替换中剩余的反斜杠作为String::replaceAll()的工件丢失。