JOLT JSON转换-按动态属性值筛选数组无效

ijxebb2r  于 2023-01-10  发布在  其他
关注(0)|答案(1)|浏览(103)

如果我们指定一个静态的搜索值,JSON数组的过滤工作正常,如果我们使用一个动态的值,就不工作了。
尝试动态传递值。
在输入json下面添加了jolt规范,供您参考。
输入:

{
  "selected_key": "key2",
  "keys": [
    {
      "name": "value1",
      "key": "key1"
    },
    {
      "name": "value21",
      "key": "key2"
    },
    {
      "name": "value22",
      "key": "key2"
    },
    {
      "name": "value3",
      "key": "key3"
    },
    {
      "name": "value4",
      "key": "key4"
    }
  ]
}

JOLT规范:

[
  {
    "operation": "shift",
    "spec": {
      "keys": {
        "*": {
          "key": {
            "@(4,selected_key)": {
              "@2": "test"
            }
          }
        }
      }
    }
  }
]

预期输出:

{
  "test": [
    {
      "name": "value21",
      "key": "key2"
    },
    {
      "name": "value22",
      "key": "key2"
    }
  ]
}

输出:规范不过滤任何值,所有数组项都被添加到输出json中

{
  "test": [
    {
      "name": "value1",
      "key": "key1"
    },
    {
      "name": "value21",
      "key": "key2"
    },
    {
      "name": "value22",
      "key": "key2"
    },
    {
      "name": "value3",
      "key": "key3"
    },
    {
      "name": "value4",
      "key": "key4"
    }
  ]
}
gc0ot86w

gc0ot86w1#

您可以使用两个连续的shift转换规范,例如

[
  {// tag the objects or array of objects by common "key" values
    "operation": "shift",
    "spec": {
      "*": "&",
      "keys": {
        "*": {
          "@": "@(1,key)"
        }
      }
    }
  },
  {// rename "key2" with "test"
    "operation": "shift",
    "spec": {
      "selected_key": {
        "*": {
          "@(2,&)": "test"
        }
      }
    }
  }
]

http://jolt-demo.appspot.com/站点上的***演示***是

相关问题