用jolt修改json数组对象

问题描述 投票:0回答:1

我一直在写一个 json 转换的 jolt,现在已经完成一半了。如果数组中存在,则需要修改数组中的 json 对象,如果根本不存在,则需要创建新对象。该对象可以出现在 json 中的任何位置。

{

  "id": "id_1",
  "targetId": "targetId42",
  "externalId": "1extid",
  "textArray": [
    {
      "name": "attribute1",
      "value": "value1"
    },
    {
      "name": "attribute2",
      "value": "value2"
    },
    {
      "name": "attribute3",
      "value": "to be modified"
    }
  ]
  "createdDate": "2020-09-10",
  "description": "Value Pack",
  "id": "20020",
  "state": "Complete",
  "requestedCompletionDate": "2022-09-13"
}

预期产量

{
  "id": "id_1",
  "targetId": "targetId42",
  "externalId": "1extid",
  "textArray": [
    {
      "name": "attribute1",
      "value": "value1"
    },
    {
      "name": "attribute2",
      "value": "value2"
    },
    {
      "name": "attribute3",
      "value": "modified value"
    }
  ]
  "createdDate": "2020-09-10",
  "description": "Value Pack",
  "id": "20020",
  "state": "Complete",
  "requestedCompletionDate": "2022-09-13"
}

如果块 attribute3 不存在,我们将使用可以通过自定义属性传递的值来创建它。 注意 - attribute3 对象可以出现在 textArray 数组中的任何位置。

尝试了不同的震动,但没有得到所需的输出。

json apache-nifi jolt
1个回答
0
投票

您可以使用以下移位转换规范

[
  {
    "operation": "shift",
    "spec": {
      "*": "&", // all elements other than "textArray"
      "textArray": {
        "*": {
          "name": {
            "@": "&3[&2].&",
            "attribute3": { // conditional comparison starts here
              "#modified value": "&4[&3].value"
            },
            "*": {
              "@2,value": "&4[&3].value"
            }
          }
        }
      }
    }
  }
]
© www.soinside.com 2019 - 2024. All rights reserved.