是否有可能匹配Jolt shiftr中的整个路径?

时间:2016-12-14 22:23:56

标签: json transformation jolt

假设我要转换以下内容

原始

{
    "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功能可以让这更好?

2 个答案:

答案 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)。