Apache nifi apachenifi中关于unescapeJson的问题

Apache nifi apachenifi中关于unescapeJson的问题,apache-nifi,Apache Nifi,我正在使用ApacheNIFI转换一些数据 我有一条线索:他没有说“S\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\,和unescapeJson()给我这个结果:他没有说“S”top 是这样吗?我的预期结果是他没有说“S \”top!“ 如果函数是这样设计的,那么如何才能得到预期的结果 例如: GetFile processor只是读取了一个包含以下内容的文件:他没有说,\\\\\\\\\\\\\\\\\\”通过将R

我正在使用ApacheNIFI转换一些数据

我有一条线索:他没有说“S\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\,和unescapeJson()给我这个结果:他没有说“S”top

是这样吗?我的预期结果是他没有说“S \”top!“

如果函数是这样设计的,那么如何才能得到预期的结果

例如:


GetFile processor只是读取了一个包含以下内容的文件:他没有说,\\\\\\\\\\\\\\\\\\”

通过将ReplaceTextReplacement Value属性更改为just
${'$1'}
,似乎可以找到解决方法。在我的示例中,这产生了所需的输出,
他没有说“S\”top!“

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


更新

我把上面的顺序搞错了,决议的顺序如下:

  • 搜索结果:
    他没有说“S\\\\\”top!\“
  • 表达式语言将
    ${'$1':unescapeJson()}
    计算为:
    他没有说“S\”top!“
  • 替换结果是:
    他没有说“S”top!”

  • 因此,unescapeJson()正在按预期工作,而您不期望的行为是,剩余的反斜杠作为的工件在替换中丢失。

    通过将ReplaceText替换值属性更改为just
    ${'$1'}
    似乎可以解决此问题。在我的示例中,这产生了所需的输出,
    他没有说“S\”top!“

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


    更新

    我把上面的顺序搞错了,决议的顺序如下:

  • 搜索结果:
    他没有说“S\\\\\”top!\“
  • 表达式语言将
    ${'$1':unescapeJson()}
    计算为:
    他没有说“S\”top!“
  • 替换结果是:
    他没有说“S”top!”

  • 因此,unescapeJson()正在按预期工作,而您不期望的行为是,剩余的反斜杠作为的工件在replace中丢失。

    能否共享您使用的确切表达式语言语句,并澄清转义的JSON是如何传入的?重现这个问题会很有帮助。谢谢你的回复。我已经编辑了我的问题并上传了一些截图。你能分享你正在使用的确切表达式语言语句并澄清转义的JSON是如何传入的吗?重现这个问题会很有帮助。谢谢你的回复。我编辑了我的问题并上传了一些截图。我发现了更多,但底线可能是对JSON正文内容使用特定于JSON的内容,如EvaluateJsonPath。我发现了更多,但底线可能是对JSON正文内容使用特定于JSON的内容,比如EvaluateJsonPath。