JOLT spec array of objects 删除键

JOLT spec array of objects remove key

我正在尝试了解如何删除下面的键和对象层。任何帮助将不胜感激。尝试在 NIFI 中使用 JOLT 处理器来解决此数据更改。

输入:

 [ {
  "rbr" : {
    "fetchTime" : "2020-07-06T23:46:23.677Z",
    "customMetadata" : {
      "x" : "1",
      "o2" : {
        "x2" : "y"
      }
    }
  },
  "xyz": {
    "fetchTime" : "2020-07-06T23:46:23.677Z",
    "customMetadata" : {
      "x" : "1",
      "o2" : {
        "x2" : "y"
      }
    }
  }
}
]

期望的输出:

 [
  {
    "fetchTime" : "2020-07-06T23:46:23.677Z",
    "customMetadata" : {
      "x" : "1",
      "o2" : {
        "x2" : "y"
      }
    },
    "type": "rbr"
  },
  {
    "fetchTime" : "2020-07-06T23:46:23.677Z",
    "customMetadata" : {
      "x" : "1",
      "o2" : {
        "x2" : "y"
      }
    },
    "type": "xyz"

  }
]

遍历数组,并为每个 obj 创建 newObj,如下所示:

objKey=Object.keys(obj)[0];
newObj=obj[objKey];
newObj.type=objKey;

并推入新数组。

可以通过简单的移位操作完成

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "fetchTime": "[#2].fetchTime",
          "customMetadata": "[#2].customMetadata",
          "$": "[#2].type"
        }
      }
    }
  }
]

编辑 1

可以使用 "@": "[#3].&",

从当前水平移动所有值
[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "*": {
            "@": "[#3].&",
            "": "[#3].type"
          }
        }
      }
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "*": {
        "type": "=firstElement(@(1,type))"
      }
    }
  }
]