JOLT 转换修改覆盖 - 替换数组中的元素值

JOLT transformation modify overwrite - replace element value in array

我正在使用 JOLT 库对 json 值进行更改。

对于键值项,我找到了使用

的解决方案
"operation": "modify-overwrite-beta"

但是当涉及到编辑数组中的值时,我遇到了问题。

让我们举个例子 JSON:

{
  "parentModule": [
    {
      "childModule": {
        "arrayModule": [
          "KK",
          "VV"
        ]
      }
    }
  ]
}

我正在使用的规格

[
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "parentModule": {
        "*": {
          "childModule": {
            "arrayModule": [
              "TT",
              "RR"
            ]
          }
        }
      }
    }
  }
]

我想要的结果是数组被完全覆盖,但目前它只替换第一个值。

预期结果:

{
 "parentModule": [
    {
      "childModule": {
        "arrayModule": [
          "TT",
          "RR"
        ]
      }
    }
  ]
}

有什么办法可以:

  1. 完全覆盖数组?
  2. 有条件地更改值,例如如果 TT => 更改为 AB,否则如果 RR 比写 BB ?

谢谢

您可以使用 shift 转换和 # 运算符来表示新列表的固定元素值待创建。

对于第一个案例(如果我们有"arrayModule": ["KK", "VV"]输入):

 [
   {
     "operation": "shift",
     "spec": {
       "parentModule": {
         "*": {
           "childModule": {
             "arrayModule": {
               "#TT": "&4[&3].&2.&1[]",
               "#RR": "&4[&3].&2.&1[]"
             }
           }
         }
       }
     }
   }
]

demo1 :

对于第二个(如果我们有"arrayModule": ["TT", "RR"]输入):

 [
   {
     "operation": "shift",
     "spec": {
       "parentModule": {
         "*": {
           "childModule": {
             "arrayModule": {
               "*": {
                 "TT": { "#AB": "&6[&5].&4.&3" },
                 "RR": { "#BB": "&6[&5].&4.&3" }
               }
             }
           }
         }
       }
     }
   }
]

demo2 :

同时设置适当的 & 符号级别以分别在多个级别达到所需的键名称。