Jolt Transformation - 替换所有匹配项

Jolt Transformation - Replace all matches

我正在尝试使用 https://jolt-demo.appspot.com/ 进行 JOLT 转换。

我想用“7.11”替换所有 "master" 值。

输入:

{
  "build": [
    {
      "number": "7.11.13898",
      "branchName": "branch1"
    },
    {
      "number": "7.11.13896",
      "branchName": "branch2"
    },
    {
      "number": "7.11.13895",
      "branchName": "master"
    },
    {
      "number": "7.11.13900",
      "branchName": "master"
    }
  ]
}

期望的输出:

{
      "build": [
        {
          "number": "7.11.13898",
          "branchName": "branch1"
        },
        {
          "number": "7.11.13896",
          "branchName": "branch2"
        },
        {
          "number": "7.11.13895",
          "branchName": "7.11"
        },
        {
          "number": "7.11.13900",
          "branchName": "7.11"
        }
      ]
    }

如果没有 changing/altering 数据结构,我似乎无法获得有效的转换或转换。 当前方法:

[
  {
    "operation": "shift",
    "spec": {
      "build": {
        "*": {
          "number": "build[&1].number",
          "branchName": {
            "master": {
              "#7.11": "build[&3].branchName"
            },
            "*": {
              "@(2, branchName)": "build[&3].branchName"
            }
          }
        }
      }
    }
  }
]

当前输出:

 {
  "build" : [ {
    "number" : "7.11.13898"
  }, {
    "number" : "7.11.13896"
  }, {
    "branchName" : "7.11",
    "number" : "7.11.13895"
  } ]
}

你快找到了。您需要将 @(2, branchName) 替换为 $,它应该适合您。

The "$" operator means use the input key, instead of the input value as output.

解决方案:

[
  {
    "operation": "shift",
    "spec": {
      "build": {
        "*": {
          "number": "build[&1].number",
          "branchName": {
            "master": {
              "#7.11": "build[&3].branchName"
            },
            "*": {
              "$": "build[&3].branchName"
            }
          }
        }
      }
    }
  }
]