Jolt: modify-default-beta: 第一个参数是做什么的?
Jolt: modify-default-beta: what does the first argument do?
我发现这个 关于用另一个字段的值替换一个不存在的字段。它解释了 modify-default-beta
操作的用法。 post中提到的例子:
规格
[
{
"operation": "modify-default-beta",
"spec": {
"shipping_address": {
"address": "@(2,payment_address.address)"
}
}
}
]
输入A,没有送货地址
{
"payment_address": {
"address": "some address"
},
"shipping_address": {}
}
生成输出 A,其中复制了帐单地址
{
"payment_address" : {
"address" : "some address"
},
"shipping_address" : {
"address" : "some address"
}
}
@(2,payment_address.address)
中的“2”是什么意思。我试过这个例子here,即使我用“3”替换“2”它也能正常工作。
Jolt 操作对输入 JSON 和 Spec 进行并行树遍历。它从 Spec & input JSON 的根开始,然后进行深度优先遍历。
在进行深度优先遍历时,它会维护 "stack" 它匹配的数据/节点。
因此在本规范中,当您 "match" 下降到 "address"
"operation": "modify-default-beta",
"spec": {
"shipping_address": {
"address": "@(2,payment_address.address)"
}
}
堆栈看起来像:
Stack "pointer" Matched value Pointer to Input
0 "address" Value of Address : String if it exists
1 "shipping_address" Value of "shipping_address" : Map if it exists
2 "_root_" A made up entry to point to Input Json (Map or List)
3 "_root_" Another "root" that points to a Map
WorkAround to deal with top level List JSON input
所以“2”让你回到输入 Json 的 "top level",这样你就可以 "navigate" 向下 "payment_address.address"。
"3" 之所以有效,是因为您现在处于包装器中,因此所有 "top level" 输入到 Transforms 的都是一个 Map,以解决顶级列表 /"[]" 如果有效 JSON。这个包装器是特殊的,与“2”具有相同的引用。
堆栈中不存在“4”,因此它不执行任何操作。
我发现这个 modify-default-beta
操作的用法。 post中提到的例子:
规格
[
{
"operation": "modify-default-beta",
"spec": {
"shipping_address": {
"address": "@(2,payment_address.address)"
}
}
}
]
输入A,没有送货地址
{
"payment_address": {
"address": "some address"
},
"shipping_address": {}
}
生成输出 A,其中复制了帐单地址
{
"payment_address" : {
"address" : "some address"
},
"shipping_address" : {
"address" : "some address"
}
}
@(2,payment_address.address)
中的“2”是什么意思。我试过这个例子here,即使我用“3”替换“2”它也能正常工作。
Jolt 操作对输入 JSON 和 Spec 进行并行树遍历。它从 Spec & input JSON 的根开始,然后进行深度优先遍历。
在进行深度优先遍历时,它会维护 "stack" 它匹配的数据/节点。
因此在本规范中,当您 "match" 下降到 "address"
"operation": "modify-default-beta",
"spec": {
"shipping_address": {
"address": "@(2,payment_address.address)"
}
}
堆栈看起来像:
Stack "pointer" Matched value Pointer to Input
0 "address" Value of Address : String if it exists
1 "shipping_address" Value of "shipping_address" : Map if it exists
2 "_root_" A made up entry to point to Input Json (Map or List)
3 "_root_" Another "root" that points to a Map
WorkAround to deal with top level List JSON input
所以“2”让你回到输入 Json 的 "top level",这样你就可以 "navigate" 向下 "payment_address.address"。
"3" 之所以有效,是因为您现在处于包装器中,因此所有 "top level" 输入到 Transforms 的都是一个 Map,以解决顶级列表 /"[]" 如果有效 JSON。这个包装器是特殊的,与“2”具有相同的引用。
堆栈中不存在“4”,因此它不执行任何操作。