复杂的摇动变换 - 注入数组中的元素

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

我有复杂的(EDI)输入,如下所示:

{
  "INS-2000_loop": [
    {
      "INS_05": "A",
      "INS_06": "D",
      "INS_08": "AC"
    },
    {
      "REF_01": "0F",
      "REF_02": "111111111"
    },
    {
      "NM1-2100A_loop": [
        {
          "NM1_01": "IL",
          "NM1_02": "1",
          "NM1_03": "aaa",
          "NM1_04": "bbb"
        },
        {
          "PER_03": "HP",
          "PER_04": "1234567890"
        }
      ]
    },
    {
      "HD-2300_loop": [
        {
          "HD_01": "001",
          "HD_03": "HMO",
          "HD_04": "485-014-000",
          "HD_05": "IND"
        },
        {
          "DTP_01": "348",
          "DTP_02": "D8",
          "DTP_03": "20240401"
        }
      ]
    },
    {
      "HD-2300_loop": [
        {
          "HD_01": "001",
          "HD_03": "HMO",
          "HD_04": "485-014-000",
          "HD_05": "IND"
        },
        {
          "DTP_01": "348",
          "DTP_02": "D8",
          "DTP_03": "20240101"
        },
        {
          "DTP_01": "349",
          "DTP_02": "D8",
          "DTP_03": "20240331"
        }
      ]
    }
  ]
}

输入可以有任意数量的

HD-2300_loop
元素(通常少于 5 个),并且只能有一个
INS-2000_loop
元素。我希望
HD-2300_loop
元素“驱动”输出,以便输出是与
HD-2300_loop
元素数量相同长度的复杂对象数组。输出数组的复杂对象需要具有
HD-2300_loop
元素中的所有数据以及
INS-2000_loop
元素中除
HD-2300_loop
之外的所有子元素的数据,如下所示:

[
    {
        "L2300": [
            {
                "HD_01": "001",
                "HD_03": "HMO",
                "HD_04": "485-014-000",
                "HD_05": "IND"
            },
            {
                "DTP_01": "348",
                "DTP_02": "D8",
                "DTP_03": "20240101"
            },
            {
                "DTP_01": "349",
                "DTP_02": "D8",
                "DTP_03": "20240331"
            }
        ],
        "L2000": [
            {
                "INS_05": "A",
                "INS_06": "D",
                "INS_08": "AC"
            },
            {
                "REF_01": "0F",
                "REF_02": "111111111"
            },
            {
                "NM1-2100A_loop": [
                    {
                        "NM1_01": "IL",
                        "NM1_02": "1",
                        "NM1_03": "aaa",
                        "NM1_04": "bbb"
                    },
                    {
                        "PER_03": "HP",
                        "PER_04": "1234567890"
                    }
                ]
            }
        ]
    },
    ...
]

我从以下规范开始,但它没有给出我想要的东西 - 我还没有弄清楚如何将

@3
选择注入到
@1
选择的结果中。另外,我还没有弄清楚如何重命名选择结果(到
L2300
L2000
)以及如何跳过
HD-2300_loop
选择结果中的
@3
子项。

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "HD-2300_loop": {
            "@1": "",
            "@3": ""
          }
        }
      }
    }
  }
]

如果有人能给我指点 Jolt 文档或备忘单来解释

&
运算符如何工作,我也将不胜感激。非常感谢。

apache-nifi jolt
1个回答
0
投票

嗨,这个规范将帮助您解决查询:

[
  {
    "operation": "shift",
    "spec": {
      "INS-2000_loop": {
        "*": {
          "HD-2300_loop": {
            "*": {
              "*": "L2300[#2].&"
            }
          },
          "INS_*": "L2000.[#2].&",
          "REF_*": "L2000.[#2].&",
          "NM1-2100A_loop": "L2000.[#2].&"
        }
      }
    }
  },
  {
    "operation": "cardinality",
    "spec": {
      "L2300": {
        "*": {
          "*": "ONE"
        }
      }
    }
  }
]
© www.soinside.com 2019 - 2024. All rights reserved.