需要帮助使用Jolt Transform展平复杂的嵌套JSON

zkure5ic  于 2023-05-08  发布在  其他
关注(0)|答案(1)|浏览(92)

我遇到了一个问题,使用jolt转换转换一个非常复杂的嵌套JSON。输入和输出细节如下所示。
输入

{
  "guid": "String 1",
  "WebHookId": 1234567890,
  "siteLocation": "offshore",
  "ReferenceCountry": [
    {
      "RefCountry": "DE",
      "Country": "NL"
    }
  ],
  "WTGLevel": [
    {
      "SCID": "5gmqATexwYw",
      "ReferenceCountry": "DE",
      "Material": "WTG_01",
      "Description": "CS-048948A-#01",
      "Quantity": 1,
      "UnitOfMeasure": "EA",
      "WTGType": "V136-4.0MW",
      "RotorDiameter": "136 m",
      "MarkRelease": "3F",
      "NominalEffect": 4200,
      "HubHeight": 112,
      "component": [
        {
          "Material": "NACELLE_01",
          "Description": "Nacelle MSI",
          "Quantity": 1,
          "UnitOfMeasure": "EA",
          "CapacityType": "N_V136_4.0MW_TR_3F",
          "MaterialGroup": 325,
          "DerivedMaterial": 29227496,
          "MaterialIndicator": "PLAN_LO",
          "PriceBaseID": "P/NAC:P_3MW/MK_3F/R_136M/FRQ_50HZ/LOC_04"
        },
        {
          "Material": "SP_AVI_LAMP_01",
          "Description": "Site Parts Aviation Lamp MSI",
          "Quantity": 1,
          "UnitOfMeasure": "EA",
          "CapacityType": "NAC_OPT",
          "MaterialGroup": 5,
          "DerivedMaterial": 29197892,
          "MaterialIndicator": "VAR",
          "PriceBaseID": "P/AV_LA:AVWTG_3MW/AV_LA_18/AV_Q_1"
        }
      ]
    },
    {
      "SCID": "zyUL6lemDdM",
      "ReferenceCountry": "DE",
      "Material": "WTG_01",
      "Description": "CS-042692A-#01",
      "Quantity": 1,
      "UnitOfMeasure": "EA",
      "WTGType": "V136-4.0MW",
      "RotorDiameter": "136 m",
      "MarkRelease": "3E",
      "NominalEffect": 4.2,
      "HubHeight": 112,
      "component": [
        {
          "Material": "BLADE_01",
          "Description": "Blade MSI",
          "Quantity": 3,
          "UnitOfMeasure": "EA",
          "CapacityType": "BLA_67M_STR",
          "MaterialGroup": 40,
          "DerivedMaterial": 29156738,
          "MaterialIndicator": "VAR",
          "PriceBaseID": "P/BLA:P_3MW/MK_3E/R_136M/DEICE_N/BLATY_00"
        },
        {
          "Material": "DRIVE_TRAIN_01",
          "Description": "Drive Train MSI",
          "Quantity": 1,
          "UnitOfMeasure": "EA",
          "CapacityType": "DT_V136_4.0ME_3E",
          "MaterialGroup": 540,
          "DerivedMaterial": 29219265,
          "MaterialIndicator": "VAR",
          "PriceBaseID": "P/DT:P_3MW/MK_3E/R_136M/LOC_01"
        }
      ]
    }
  ]
}

预期输出

[
  {
    "guid": "String 1",
    "WebHookId": 1234567890,
    "siteLocation": "offshore",
    "RefCountry": "DE",
    "Country": "NL",
    "SCID": "5gmqATexwYw",
    "ReferenceCountry": "DE",
    "Material": "WTG_01",
    "Description": "CS-048948A-#01",
    "Quantity": 1,
    "UnitOfMeasure": "EA",
    "WTGType": "V136-4.0MW",
    "RotorDiameter": "136 m",
    "MarkRelease": "3F",
    "NominalEffect": 4200,
    "HubHeight": 112,
    "Cmpt_Material": "NACELLE_01",
    "Cmpt_Quantity": 1,
    "Cmpt_UnitOfMeasure": "EA",
    "CapacityType": "N_V136_4.0MW_TR_3F"
  },
  {
    "guid": "String 1",
    "WebHookId": 1234567890,
    "siteLocation": "offshore",
    "RefCountry": "DE",
    "Country": "NL",
    "SCID": "5gmqATexwYw",
    "ReferenceCountry": "DE",
    "Material": "WTG_01",
    "Description": "CS-048948A-#01",
    "Quantity": 1,
    "UnitOfMeasure": "EA",
    "WTGType": "V136-4.0MW",
    "RotorDiameter": "136 m",
    "MarkRelease": "3E",
    "NominalEffect": 4.2,
    "HubHeight": 112,
    "Cmpt_Material": "SP_AVI_LAMP_01",
    "Cmpt_Quantity": 1,
    "Cmpt_UnitOfMeasure": "EA",
    "CapacityType": "NAC_OPT"
  },
  {
    "guid": "String 1",
    "WebHookId": 1234567890,
    "siteLocation": "offshore",
    "RefCountry": "DE",
    "Country": "NL",
    "SCID": "zyUL6lemDdM",
    "ReferenceCountry": "DE",
    "Material": "BLADE_01",
    "Description": "CS-042692A-#01",
    "Quantity": 1,
    "UnitOfMeasure": "EA",
    "WTGType": "V136-4.0MW",
    "RotorDiameter": "136 m",
    "MarkRelease": "3E",
    "NominalEffect": 4.2,
    "HubHeight": 112,
    "Cmpt_Material": "BLADE_01",
    "Cmpt_Quantity": 1,
    "Cmpt_UnitOfMeasure": "EA",
    "CapacityType": "NAC_OPT"
  },
  {
    "guid": "String 1",
    "WebHookId": 1234567890,
    "siteLocation": "offshore",
    "RefCountry": "DE",
    "Country": "NL",
    "SCID": "5gmqATexwYw",
    "ReferenceCountry": "DE",
    "Material": "BLADE_01",
    "Description": "CS-042692A-#01",
    "Quantity": 1,
    "UnitOfMeasure": "EA",
    "WTGType": "V136-4.0MW",
    "RotorDiameter": "136 m",
    "MarkRelease": "3E",
    "NominalEffect": 4.2,
    "HubHeight": 112,
    "Cmpt_Material": "DRIVE_TRAIN_01",
    "Cmpt_Quantity": 1,
    "Cmpt_UnitOfMeasure": "EA",
    "CapacityType": "NAC_OPT"
  }
]

Component Array值以值Cmpt_* 为前缀。可能存在2个或多个SCID,并且在每个SCID下可能存在多个组件。
请帮我这个忙。

nc1teljy

nc1teljy1#

您可以使用以下shift转换规范

[
  {
    "operation": "shift",
    "spec": {
      "WTGLevel": {
        "*": {
          "component": {
            "*": { // partition the objects by indexes from two different levels
              "@4,guid": "&3_&1.guid",
              "@4,WebHookId": "&3_&1.WebHookId",
              "@4,siteLocation": "&3_&1.siteLocation",
              "@4,ReferenceCountry[0].RefCountry": "&3_&1.RefCountry",
              "@4,ReferenceCountry[0].Country": "&3_&1.Country",
              "@2,SCID": "&3_&1.SCID",
              "@2,ReferenceCountry": "&3_&1.ReferenceCountry",
              "@2,Material": "&3_&1.Material",
              "@2,Description": "&3_&1.Description",
              "@2,HubHeight": "&3_&1.HubHeight",
              "@2,Quantity": "&3_&1.Quantity",
              "@2,UnitOfMeasure": "&3_&1.UnitOfMeasure",
              "@2,WTGType": "&3_&1.WTGType",
              "@2,RotorDiameter": "&3_&1.RotorDiameter",
              "@2,MarkRelease": "&3_&1.MarkRelease",
              "@2,NominalEffect": "&3_&1.NominalEffect",
              "Material|Quantity|UnitOfMeasure": "&3_&1.Cmpt_&",
              "CapacityType": "&3_&1.&"
            }
          }
        }
      }
    }
  },
  { // add an array wrapper at the topmost level while getting rid of newly formed object labels
    "operation": "shift",
    "spec": {
      "*": "[]"
    }
  }
]

相关问题