颠簸:修改默认测试版:第一个参数有什么作用



我遇到了这个问题,关于用另一个字段的值替换一个不存在的字段。它解释了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"的含义是什么.我在这里尝试了这个例子,即使我用"2"替换"3",它也可以工作。

Jolt 操作对输入 JSON 和规范进行并行树遍历。 它从根规范和输入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 的"顶级",以便您可以向下"导航"payment_address.address"。

"

3"之所以有效,是因为您现在处于包装器中,该包装器使转换的所有"顶级"输入都是映射,以解决顶级列表/"[]"(如果有效的 JSON)的事实。 此包装器的特殊情况是与"2"具有相同的引用。

"4"在堆栈中不存在,因此它不执行任何操作。

最新更新