是否可以匹配 Jolt 移位器中的整个路径?

Is it possible to match an entire path in Jolt shiftr?

假设我要改造以下

原创

{
    "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 移位器功能可以使它变得更好?

不存在执行此操作的现有转换。

几个问题:

1) 您想要的转换更像是 "nudge" 而不是 "shift"。因为您想要更改 Json 树中的单个值,而让树的其余部分保持不变。这在 Jolt 中不存在。
"shift" 制作一个新的输出映射,"copies" 数据从输入到输出。
我尝试对相同的输入 Json 树结构进行移位写入,但它是 "dangerous" 因为它很容易 运行 进入 ConcurrentModification 异常。

2) 您布置的转换样式非常适合简单的事情,但我不知道它如何扩展到所有复杂的通配符逻辑(*、[]、&)。

就是答案

{
    "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).