0

假设我要转换以下内容

原来的

{
    "data": {
        "a": {
            "b": {
                "c": {
                    "value": 1
                }
            }
        }
    }
}

为简单起见,假设我只想更改valuenewValue

结果

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

4

2 回答 2

1

没有现有的转换可以做到这一点。

几个问题:

1)您想要的转变更像是“轻推”而不是“转变”。因为您想更改 Json 树中的单个值,而不要理会树的其余部分。这在 Jolt 中不存在。
“shift”创建一个新的输出映射,并将数据从输入“复制”到输出。
我尝试将 shift 写入相同的输入 Json 树结构,但它很“危险”,因为它很容易遇到 ConcurrentModification 异常。

2)您布置的转换样式对于简单的事情很好,但我不知道它如何扩展到所有复杂的东西通配符逻辑(*,[],&)。

于 2016-12-20T17:38:56.997 回答
0

这是答案

{
    "operation": "modify-overwrite-beta",
    "spec": {
        "jobInput": {
            "ai": {
                "common": {
                    "seed": "@(4,ai.model_structure.seed)"
                }
            }
        }
    }
}

@(4,ai.model_structure.seed)

上句表示在 json 树上向后 4 步,并在此路径中使用种子(ai.model_structure.seed)。

于 2021-01-19T14:22:11.053 回答