假设我要转换以下内容
原始
{
"data": {
"a": {
"b": {
"c": {
"value": 1
}
}
}
}
}
为简单起见,我只想将value
更改为newValue
结果
{
"data" : {
"a" : {
"b" : {
"c" : {
"newValue" : 1
}
}
}
}
}
我可以使用以下Jolt规范来做到这一点:
规格
[
{
"operation": "shift",
"spec": {
"data": {
"a": {
"b": {
"c": {
"value": "&4.&3.&2.&1.newValue"
}
}
}
}
}
}
]
但是我觉得应该有一个不那么详细的语法......或许类似下面的内容(它不起作用):
期望的语法......或类似的东西
[
{
"operation": "shift",
"spec": {
"data.a.b.c.value": "data.a.b.c.newValue" // Even nicer to use & somehow
}
}
]
我是否有任何Jolt shiftr功能可以让这更好?
答案 0 :(得分:1)
没有现有的转换可以做到这一点。
几个问题:
1)你想要的变革更多的是一个轻快的变形"而不是" shift"。在那里你想要改变Json树中的单个值并留下树的其余部分。这在Jolt中并不存在 "移"制作一个新的输出地图,"复制"从输入到输出的数据 我尝试将shift写入相同的输入Json树结构,但它是"危险"因为它很容易遇到ConcurrentModification异常。
2)你所提出的转换风格对于简单的事情是很好的,但我不知道它如何扩展到所有复杂的东西通配符逻辑(*,[],&)。
答案 1 :(得分:0)
这就是答案
{
"operation": "modify-overwrite-beta",
"spec": {
"jobInput": {
"ai": {
"common": {
"seed": "@(4,ai.model_structure.seed)"
}
}
}
}
}
<块引用>
@(4,ai.model_structure.seed)
上句表示在 json 树上向后 4step 并使用 seed 与此路径(ai.model_structure.seed)。