如何使用 Jolt 将数组插入特定数组元素

How can I insert an array into a specific array element using Jolt

Question/problem

如何使用 Jolt 将数组插入数组中的特定对象?

输入

对象具有一组通用属性,但支持可选属性。

具体对象需要获取这些可选属性取决于它们在数组中的特定位置,即第二个([1])。这些可选属性将作为 jolt 转换的一部分添加。

{
  "array" : [
   {
     "key" : "a key",
     "value" : "a value"
   },
   {
     "key" : "another key",
     "value" : "another value"
   }
  ]
}

预计

{
  "array" : [
   {
     "key" : "a key",
     "value" : "a value"
   },
   {
     "key" : "another key",
     "value" : "another value",
     "values": ["extra value1", "extra value2"]
   }
  ]
}

已经尝试过的

我试过 defaultmodify-default-betamodify-overwrite-beta 和 none 似乎和我想象的一样。

默认

似乎默认忽略了数组引用 "[1]" 所以尝试了似乎支持这个的 beta 操作。

默认规格

[
  {
    "operation": "default",
    "spec": {
      "array": {
        "[1]": {
          "values": ["extra value1", "extra value2"]
        }
      }
    }
  }
]

默认实际值

{
  "array" : [ {
    "key" : "a key",
    "value" : "a value"
  }, {
    "key" : "another key",
    "value" : "another value"
  } ]
}

修改默认测试版

解析数组引用 "[1]",但仅应用规范中数组中的第一个元素而不是整个数组

修改默认测试版规范

[
  {
    "operation": "modify-default-beta",
    "spec": {
      "array": {
        "[1]": {
          "values": ["extra value1", "extra value2"]
        }
      }
    }
  }
]

修改-默认-beta 实际

{
  "array" : [ {
    "key" : "a key",
    "value" : "a value"
  }, {
    "key" : "another key",
    "value" : "another value",
    "values" : "extra value1" // array is dumped
  } ]
}

修改覆盖测试版

尝试了 modify-overwrite-beta,我得到了与 modify-default-beta 相同的行为。

修改覆盖测试版规范

[
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "array": {
        "[1]": {
          "values": ["extra value1", "extra value2"]
        }
      }
    }
  }
]

修改覆盖测试版实际

{
  "array" : [ {
    "key" : "a key",
    "value" : "a value"
  }, {
    "key" : "another key",
    "value" : "another value",
    "values" : "extra value1" // array is dumped
  } ]
}

有趣的旁注

如果输入中没有数组引用,这是一个相当简单的问题,当有数组引用和 *-beta 操作时,行为似乎不是我所期望的。

简单默认

我已经从输入中删除了数组

简单的默认输入

{
  "element1": {
    "key": "a key",
    "value": "a value"
  },
  "element2": {
    "key": "a key",
    "value": "another value"
  }
}

简单的默认规范

[
  {
    "operation": "default",
    "spec": {
      "element2": {
        "values": ["extra value1", "extra value2"]
      }
    }
  }
]

简单默认实际值

{
  "element1" : {
    "key" : "a key",
    "value" : "a value"
  },
  "element2" : {
    "key" : "another key",
    "value" : "another value",
    "values" : [ "extra value1", "extra value2" ]
  }
}

这似乎是我对规范用法的误解。

看来您没有插入数组,而是要插入的每个元素。

[
  {
    "operation": "modify-default-beta",
    "spec": {
      "array": {
        "[1]": {
          "values": {
            "[0]": "extra value1",
            "[1]": "extra value2"
          }
        }
      }
    }
  }
]

上面的规范将两个值都插入到值属性中,特别是插入到元素 "[0]" 和元素 "[1]" 中。

这也适用于 modify-overwrite-beta 操作

[
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "array": {
        "[1]": {
          "values": {
            "[0]": "extra value1",
            "[1]": "extra value2"
          }
        }
      }
    }
  }
]

这两个规范的结果如下:

{
  "array" : [ {
    "key" : "a key",
    "value" : "a value"
  }, {
    "key" : "another key",
    "value" : "another value",
    "values" : [ "extra value1", "extra value2" ]
  } ]
}