我正在尝试创建一个将接受输入的规范
abc:true
abc: {strings ...}
和输出:
abc:true
abc: {strings ...}
我知道这不应该需要一个 Jolt shift,我只需要包含它,以便我的数据段(两个abc
键)传输并且不会丢失,
有谁知道要在 Jolt shift 规范中添加什么来做到这一点(根据它们的值类型转移 2 个重复键)。
对于 jolt 处理器,当您尝试添加已经存在的键映射时,应用程序会为此大喊大叫。但是,在您的情况下,您似乎正在处理两种不同类型的内存存储,其中 1 是一个数组,另一个是一个变量。由于某种原因,处理器似乎优先于数组而不是单个值,但不要担心,对此有很多工作要做。
"@":"&"
在abc
.
根据 jolt 处理器移位操作中通配符的文档,@
位于代表的左侧,:
用于将传递的键作为索引。&
位于的右侧:
代表与此传递的索引关联的值(如果您愿意,可以取消引用)。这将一起提取与传递的密钥相关的所有信息。但是,这将包括所有数组值的重复,这在大多数情况下与您首先重新映射其索引的推理背道而驰。
#
允许引用信息。在 a 的右侧:
,它用于根据在回溯其数组信息时找到的匹配数来提取索引。在我们的例子中,左侧有更多用途,它允许我们将实例值的映射硬编码到新字段拿代码
"foo" :{
"bar" : {
"#lemonade" : "drinks"
}}
当 bar 的实例被视为字段“foo”的有形值时,您将把一个名为“lemonade”的值映射到一个名为“drinks”的字段。这将允许您处理与abc
标准数组不同的输出实例。但是,这是一种硬编码,因此不能转换为您最初寻求的布尔值。
[
{
"operation" : "default",
"spec":{
"ref":{
"True" : true,
"False": false
}
}
},
{
"operation" : "shift",
"spec":{
"abc":{
"true":{
"@(3,ref.true)":"abc"
},
"false":{
"@(3,ref.false)":"abc"
}
}
}
},
{
"operation" : "remove",
"spec":{
"ref" : ""
}
}
]
我们在这里所做的是在 jolt 处理器的启动处,我们正在创建一个称为 ref 的参考索引,我们将布尔值 true 和 false 传递给它以供以后使用。我们继续进行移位操作,然后我们继续执行示例 2 中所做的操作,开始指示当此特定值出现在父标头中时我们会做什么,但是我们使用附加函数@
来追溯树 3 个父母,并使用字段的参考值True
并将False
必要的布尔值附加到字段abc
。它通过删除该字段来整理所有内容,ref
因此您剩下的就是正确的abc
.
这种方法,如果不是最优雅的,不仅避免了最初的问题,而且它保留了数据类型,并且可能可以扩展以处理各种其他值,如整数甚至双精度值,但是需要进一步的测试和研究来实现这些努力.