Jolt:modify-default-beta:第一个参数是做什么的?

时间:2017-11-02 07:58:04

标签: json jolt

我遇到了question关于用另一个字段的值替换不存在的字段的问题。它解释了modify-default-beta操作的用法。帖子中提到的例子:

规格

[
  {
    "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”也能正常工作。

1 个答案:

答案 0 :(得分:1)

Jolt操作执行输入JSON和Spec的并行树遍历。它从Spec&的根源开始输入JSON然后进行深度优先遍历。

虽然它正在进行深度优先遍历,但它会维持一个"堆栈"它匹配的数据/节点的数量。

因此,在本规范中,当你"匹配"下到"地址"

"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,以便您可以导航" down" payment_address.address"。

" 3"之所以有效,是因为你现在正处于这样的包装中,这使得所有人都能达到最高水平"对变换的输入是一个地图,以解决顶级列表/" []"如果有效的JSON。这个包装器是特殊的,与" 2"。

具有相同的参考

" 4"不存在于堆栈中,因此它不会做任何事情。