Jolt - 在数组列表中插入新字段

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

我在 Jolt 转换方面遇到问题,我需要从数组列表中提取值/字段,并从我要提取的数组或外部列表中添加一个自定义字段。但让我尝试通过代码更详细地解释一下。

这是我的输入(“数据”中只有2个字段集,本来我“数据”中有200多个字段集):

{
  "result": {
    "id": "123456789",
    "year": 2023,
    "version": "0.1",
    "country": "UK",
    "modified": "2023-11-09T00:00:00",
    "data": [
      {
        "FieldNumber1": "CompanyNumber",
        "FieldNumber2": "0.1",
        "FieldNumber3": "123456789",
        "FieldNumber4": false,
        "FieldNumber5": false,
        "FieldNumber6": 1,
        "FieldNumber7": 0
      },
      {
        "FieldNumber1": "CompanyName",
        "FieldNumber2": "0.1",
        "FieldNumber3": "FunctionsAndStrings",
        "FieldNumber4": false,
        "FieldNumber5": false,
        "FieldNumber6": 1,
        "FieldNumber7": 0
      }
    ],
    "description": null,
    "downloadNumber": "aaaaa-bbbbb-11111-22-abcabc123"
  },
  "true": null,
  "false": null
}

我期待的结果是这样的:

[ {
  "id": "123456789",
  "FieldNumber1" : "CompanyNumber",
  "FieldNumber2" : "0.1",
  "FieldNumber3" : "123456789",
  "FieldNumber4" : false,
  "FieldNumber5" : false,
  "FieldNumber6" : 1,
  "FieldNumber7" : 0
}, {
  "id": "123456789",
  "FieldNumber1" : "CompanyName",
  "FieldNumber2" : "0.1",
  "FieldNumber3" : "FunctionsAndStrings",
  "FieldNumber4" : false,
  "FieldNumber5" : false,
  "FieldNumber6" : 1,
  "FieldNumber7" : 0
} ]

[ {
  "CompanyNumber": "123456789",
  "FieldNumber1" : "CompanyNumber",
  "FieldNumber2" : "0.1",
  "FieldNumber3" : "123456789",
  "FieldNumber4" : false,
  "FieldNumber5" : false,
  "FieldNumber6" : 1,
  "FieldNumber7" : 0
}, {
  "CompanyNumber": "123456789",
  "FieldNumber1" : "CompanyName",
  "FieldNumber2" : "0.1",
  "FieldNumber3" : "FunctionsAndStrings",
  "FieldNumber4" : false,
  "FieldNumber5" : false,
  "FieldNumber6" : 1,
  "FieldNumber7" : 0
} ]

我只想在每个数据集之前有一个来自“数据”的列表,但具有来自“结果”的固定“id”。 此外,在第一个数据集中,“FieldNumber1”将始终为“CompanyNumber”,并且“FieldNumber3”中的值始终与“结果”中的“id”相同。也许从“FieldNumber3”计算它更容易。

除了使用这个简单的震动规范删除“结果”并仅提取“数据”列表之外,我没有采取进一步的行动:

[
  {
    "operation": "shift",
    "spec": {
      "result": {
        "data": ""
      }
    }
  }
]

我需要使用第一个属性“id”或“CompanyNumber”将每组数据存储在表中,以便我可以将其与其他表连接。

非常感谢!

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

您可以使用以下 Jolt 规格

[
  {
    "operation": "shift",
    "spec": {
      "result": {
        "data": {
          "*": {
            "@(2,id)": "[#4].&1.id",
            "*": "[#4].&1.&"
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": "[]"
      }
    }
  }
]
© www.soinside.com 2019 - 2024. All rights reserved.