有 JOLT 文档吗? &、@等运算符的含义是什么? (NiFi、JoltTransformJSON)

2024-02-18

是的,有!我提出这个问题是为了分享我的知识,问答风格,因为我自己很难找到它:)

谢谢https://stackoverflow.com/a/67821482/1561441 https://stackoverflow.com/a/67821482/1561441(Barbaros Özhan,见评论)为我指明了正确的方向


答案是:看here https://github.com/bazaarvoice/jolt/blob/master/jolt-core/src/main/java/com/bazaarvoice/jolt/Shiftr.java and here https://github.com/bazaarvoice/jolt#Documentation

如果我错了,请纠正我,但是:哇,目前据我所知,GitHub 上有一个 .java 文件,最后一次提交于 2017 年,包含 JOLT 语法官方文档的相关部分。我必须使用它的语法,因为我正在使用 NiFi 并应用了它的 JoltTransformJSON 处理器(因此我的问题中存在 SEO 滥用,所以更多的人找到了答案)

以下是复制自的一些最相关的部分https://github.com/bazaarvoice/jolt/blob/master/jolt-core/src/main/java/com/bazaarvoice/jolt/Shiftr.java https://github.com/bazaarvoice/jolt/blob/master/jolt-core/src/main/java/com/bazaarvoice/jolt/Shiftr.java并稍作编辑。文档本身更广泛,并且还显示了示例。

'*' 通配符

  • 仅在 Shiftr Spec 的 LHS(输入 JSON 键)侧有效
  • “*”通配符可以单独使用,也可以匹配键的一部分。

'&' 通配符

  • 在 LHS(左侧 - 输入 JSON 键)和 RHS(输出数据路径)上有效
  • 意味着,取消引用“路径”来获取值并使用该值,就好像它是文字键一样。
  • 通配符的规范形式是“&(0,0)”。
  • 第一个参数是在输入路径中查找值的位置,第二个参数是要使用键的哪一部分(与 * 键一起使用)。
  • 通配符有语法糖版本,以下所有含义都相同;糖:'&' = '&0' = '&(0)' = '&(0,0)
  • 语法糖版本很好,因为有一组数据转换不需要使用规范形式,例如,如果您的输入数据没有任何“前缀”键。

'$' 通配符

  • 仅在规格的 LHS 上有效。
  • 该通配符的存在反映了这样一个事实:输入 JSON 的“数据”可以同时存在于输入 JSON 的“值”和“键”中
  • Shiftr 的基本情况操作是复制输入 JSON“值”,因此我们需要一种方法来指定我们要复制输入 JSON“键”。
  • 因此,“$”指定我们要使用输入键或输入键派生值作为要放置在输出 JSON 中的数据。
  • '$' 与 '&' 通配符的语法相同,可以理解为,解引用得到一个值,然后将该值作为要输出的数据。
  • 在两种情况下这是有用的
    1. 当输入 JSON 中的“key”需要成为输出 JSON 中的“id”值时,请参阅上面的““$”:“Secondary Ratings.&1.Id””示​​例。
    1. 您想要列出所有输入键。

'#' 通配符

  • 在左侧和右侧均有效,但两侧具有不同的行为/格式。
  • 思考它的方法是,它允许您指定一个“合成”值,也就是输入数据中找不到的值。
  • 在规范的 RHS 上,# 仅在数组上下文中有效,例如“[#2]”。
  • “[#2]”的意思是,向上三层询问该节点有多少个匹配项,然后将其用作数组中的索引。
  • 这意味着,当 Shiftr 对输入数据和规范进行并行树遍历时,它会跟踪在规范树的每个级别处理了多少个匹配项。
  • 如果您想获取 JSON 映射并将其转换为 JSON 数组,并且不关心数组的顺序,这很有用。
  • 在规范的 LHS 上,# 允许您指定一个硬编码字符串作为输出中的值。
  • 此功能的初始用例是能够处理布尔输入值,如果该值为布尔 true,则写出字符串“enabled”。请注意,这以前是可能的,但需要两个 Shiftr 步骤。

'@' 通配符

  • 在规格的两侧均有效。
  • LHS 上的基本“@”。
  • 如果您想将输入值和输入键都放在输出 JSON 中的某个位置,则需要使用此通配符。
  • 因此,“@”通配符的意思是“将树中该级别的数据值复制到输出”。

高级“@”符号通配符

  • 格式类似于“@(3,title)”,其中“3”表示向上树 3 层,然后查找键“title”并使用该键处的值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有 JOLT 文档吗? &、@等运算符的含义是什么? (NiFi、JoltTransformJSON) 的相关文章

随机推荐