是的,有!我提出这个问题是为了分享我的知识,问答风格,因为我自己很难找到它:)
谢谢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 中的数据。
- '$' 与 '&' 通配符的语法相同,可以理解为,解引用得到一个值,然后将该值作为要输出的数据。
- 在两种情况下这是有用的
-
- 当输入 JSON 中的“key”需要成为输出 JSON 中的“id”值时,请参阅上面的““$”:“Secondary Ratings.&1.Id””示例。
-
- 您想要列出所有输入键。
'#' 通配符
- 在左侧和右侧均有效,但两侧具有不同的行为/格式。
- 思考它的方法是,它允许您指定一个“合成”值,也就是输入数据中找不到的值。
- 在规范的 RHS 上,# 仅在数组上下文中有效,例如“[#2]”。
- “[#2]”的意思是,向上三层询问该节点有多少个匹配项,然后将其用作数组中的索引。
- 这意味着,当 Shiftr 对输入数据和规范进行并行树遍历时,它会跟踪在规范树的每个级别处理了多少个匹配项。
- 如果您想获取 JSON 映射并将其转换为 JSON 数组,并且不关心数组的顺序,这很有用。
- 在规范的 LHS 上,# 允许您指定一个硬编码字符串作为输出中的值。
- 此功能的初始用例是能够处理布尔输入值,如果该值为布尔 true,则写出字符串“enabled”。请注意,这以前是可能的,但需要两个 Shiftr 步骤。
'@' 通配符
- 在规格的两侧均有效。
- LHS 上的基本“@”。
- 如果您想将输入值和输入键都放在输出 JSON 中的某个位置,则需要使用此通配符。
- 因此,“@”通配符的意思是“将树中该级别的数据值复制到输出”。
高级“@”符号通配符
- 格式类似于“@(3,title)”,其中“3”表示向上树 3 层,然后查找键“title”并使用该键处的值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)