簡體   English   中英

使用嵌套 Arrays 在 nifi 中進行顛簸轉換

[英]Jolt Transformation in nifi with Nested Arrays

我正在嘗試在 NIFI 中創建一個顛簸轉換,我有一條 JSON 消息,其中header細節線條細節作為一個帶有線條細節 object 的數組。

我們可以將標題/詳細信息 JSON 轉換為詳細信息 JSON 一個單獨的 JSON 用於每個“具有 2 個新標簽的“詳細信息”和“詳細信息TRANSPORTAttribute 值”的扁平數組

“TRADETYPALLLINES”:[“GR”,“EXP”,“SE”] “TRANSPORT_CODE_ALLLINES”:[“BARGE”,“ES”,“AR”]

這是示例 JSON:

{
  "TRADE_HEADER": {
    "TRADEDETAIL": {
      "SEGMENT": "1",
      "TRADE_NUM": "NA-152",
      "PACKAGE_GUID": "ASDER3785$%SDF",
      "TRADEDETAILLINE": [
        {
          "DOC_QTY": "19956.930",
          "ACT_NOM_CONSUMED_QTY": "0.000",
          "REM_MAX_QTY_TE": "0.000",
          "XMDOCNR": "5025087976",
          "DOCITM": "0000012001",
          "COMMODITY": "RB",
          "TRADING_COMPANY": "3862",
          "PERIODICITY": "PRAGUE",
          "POSTING_DATE": "20211117",
          "MARKET": "CME",
          "TRADETYP": "GR",
          "MAX_DOC_QTY": "19956.930",
          "TRANSPORT_CODE": "BARGE",
          "DOCNR": "4700253115"
        },
        {
          "DOC_QTY": "12256.230",
          "ACT_NOM_CONSUMED_QTY": "0.000",
          "REM_MAX_QTY_TE": "0.000",
          "XMDOCNR": "5025092776",
          "DOCITM": "0000014021",
          "COMMODITY": "RB",
          "TRADING_COMPANY": "3862",
          "PERIODICITY": "PRAGUE",
          "POSTING_DATE": "20211117",
          "MARKET": "CME",
          "TRADETYP": "EXP",
          "MAX_DOC_QTY": "12256.230",
          "TRANSPORT_CODE": "ES",
          "DOCNR": "4700234521"
        },
        {
          "DOC_QTY": "14256.210",
          "ACT_NOM_CONSUMED_QTY": "0.000",
          "REM_MAX_QTY_TE": "0.000",
          "XMDOCNR": "5025023562",
          "DOCITM": "0000012041",
          "COMMODITY": "RB",
          "TRADING_COMPANY": "3862",
          "PERIODICITY": "PRAGUE",
          "POSTING_DATE": "20211117",
          "MARKET": "CME",
          "TRADETYP": "SE",
          "MAX_DOC_QTY": "14256.230",
          "TRANSPORT_CODE": "AR",
          "DOCNR": "4700278453"
        }
      ],
      "PACKAGE_SEQ_NBR": "1",
      "PACKAGE_SEQ_MAX_NBR": "1"
    }
  }
}

所需的 JSON:

[
  {
    "TRADERECORD": {
      "TRADE_NUM": "NA-152",
      "PACKAGE_GUID": "ASDER3785$%SDF",
      "DOC_QTY": "19956.930",
      "ACT_NOM_CONSUMED_QTY": "0.000",
      "REM_MAX_QTY_TE": "0.000",
      "XMDOCNR": "5025087976",
      "DOCITM": "0000012001",
      "COMMODITY": "RB",
      "TRADING_COMPANY": "3862",
      "PERIODICITY": "PRAGUE",
      "POSTING_DATE": "20211117",
      "MARKET": "CME",
      "TRADETYP": "GR",
      "MAX_DOC_QTY": "19956.930",
      "TRANSPORT_CODE": "BARGE",
      "DOCNR": "4700253115",
      "TRADETYPALLLINES": [
        "GR",
        "EXP",
        "SE"
      ],
      "TRANSPORT_CODE_ALLLINES": [
        "BARGE",
        "ES",
        "AR"
      ]
    }
  },
  {
    "TRADERECORD": {
      "TRADE_NUM": "NA-152",
      "PACKAGE_GUID": "ASDER3785$%SDF",
      "DOC_QTY": "12256.230",
      "ACT_NOM_CONSUMED_QTY": "0.000",
      "REM_MAX_QTY_TE": "0.000",
      "XMDOCNR": "5025092776",
      "DOCITM": "0000014021",
      "COMMODITY": "RB",
      "TRADING_COMPANY": "3862",
      "PERIODICITY": "PRAGUE",
      "POSTING_DATE": "20211117",
      "MARKET": "CME",
      "TRADETYP": "EXP",
      "MAX_DOC_QTY": "12256.230",
      "TRANSPORT_CODE": "ES",
      "DOCNR": "4700234521",
      "TRADETYPALLLINES": [
        "GR",
        "EXP",
        "SE"
      ],
      "TRANSPORT_CODE_ALLLINES": [
        "BARGE",
        "ES",
        "AR"
      ]
    }
  },
  {
    "TRADERECORD": {
      "TRADE_NUM": "NA-152",
      "PACKAGE_GUID": "ASDER3785$%SDF",
      "DOC_QTY": "14256.210",
      "ACT_NOM_CONSUMED_QTY": "0.000",
      "REM_MAX_QTY_TE": "0.000",
      "XMDOCNR": "5025023562",
      "DOCITM": "0000012041",
      "COMMODITY": "RB",
      "TRADING_COMPANY": "3862",
      "PERIODICITY": "PRAGUE",
      "POSTING_DATE": "20211117",
      "MARKET": "CME",
      "TRADETYP": "SE",
      "MAX_DOC_QTY": "14256.230",
      "TRANSPORT_CODE": "AR",
      "DOCNR": "4700278453",
      "TRADETYPALLLINES": [
        "GR",
        "EXP",
        "SE"
      ],
      "TRANSPORT_CODE_ALLLINES": [
        "BARGE",
        "ES",
        "AR"
      ]
    }
  }
]

這是我得到的 Jolt Spec:

[
  {
    "operation": "shift",
    "spec": {
      "TRADE_HEADER": {
        "TRADEDETAIL": {
          "TRADEDETAILLINE": {
            "*": {
              "@": "[&1]",
              "@(2,SEGMENT)": "[&1].SEGMENTH",
              "@(2,TRADE_NUM)": "[&1].TRADE_NUM",
              "@(2,PACKAGE_GUID)": "[&1].PACKAGE_GUID",
              "@(0,TRADETYP)": "[#1].TRADETYP_ALL",
              "@(0,TRANSPORT_CODE)": "[#1].TRANSPORT_CODE_ALL"
            }
          }
        }
      }
    }
},
  {
    "operation": "shift",
    "spec": {
      "*": {
        "@": "TRADERECORD"
      }
    }
  }
]

本規范的結果:

{
  "TRADERECORD" : [ {
    "DOC_QTY" : "19956.930",
    "ACT_NOM_CONSUMED_QTY" : "0.000",
    "REM_MAX_QTY_TE" : "0.000",
    "XMDOCNR" : "5025087976",
    "DOCITM" : "0000012001",
    "COMMODITY" : "RB",
    "TRADING_COMPANY" : "3862",
    "PERIODICITY" : "PRAGUE",
    "POSTING_DATE" : "20211117",
    "MARKET" : "CME",
    "TRADETYP" : "GR",
    "MAX_DOC_QTY" : "19956.930",
    "TRANSPORT_CODE" : "BARGE",
    "DOCNR" : "4700253115",
    "SEGMENTH" : "1",
    "TRADE_NUM" : "NA-152",
    "PACKAGE_GUID" : "ASDER3785$%SDF",
    "TRADETYP_ALL" : [ "GR", "EXP", "CR" ],
    "TRANSPORT_CODE_ALL" : [ "BARGE", "AR", "LCL" ]
  }, {
    "DOC_QTY" : "12256.230",
    "ACT_NOM_CONSUMED_QTY" : "0.000",
    "REM_MAX_QTY_TE" : "0.000",
    "XMDOCNR" : "5025092776",
    "DOCITM" : "0000014021",
    "COMMODITY" : "RB",
    "TRADING_COMPANY" : "3862",
    "PERIODICITY" : "PRAGUE",
    "POSTING_DATE" : "20211117",
    "MARKET" : "CME",
    "TRADETYP" : "EXP",
    "MAX_DOC_QTY" : "12256.230",
    "TRANSPORT_CODE" : "AR",
    "DOCNR" : "4700234521",
    "SEGMENTH" : "1",
    "TRADE_NUM" : "NA-152",
    "PACKAGE_GUID" : "ASDER3785$%SDF"
  }, {
    "DOC_QTY" : "14256.210",
    "ACT_NOM_CONSUMED_QTY" : "0.000",
    "REM_MAX_QTY_TE" : "0.000",
    "XMDOCNR" : "5025023562",
    "DOCITM" : "0000012041",
    "COMMODITY" : "RB",
    "TRADING_COMPANY" : "3862",
    "PERIODICITY" : "PRAGUE",
    "POSTING_DATE" : "20211117",
    "MARKET" : "CME",
    "TRADETYP" : "CR",
    "MAX_DOC_QTY" : "14256.230",
    "TRANSPORT_CODE" : "LCL",
    "DOCNR" : "4700278453",
    "SEGMENTH" : "1",
    "TRADE_NUM" : "NA-152",
    "PACKAGE_GUID" : "ASDER3785$%SDF"
  } ]
}

如何在所有詳細信息記錄中重復“TRADETYP_ALL”和“TRANSPORT_CODE_ALL”

而且我還想添加另一個標簽“TRADETYP_CODE_ALL”結合“TRADETYP_ALL”和“TRANSPORT_CODE_ALL”的值

“TRADETYP_CODE_ALL”:[“GR-BARGE”、“EXP-AR”、“CR-LCL”]

對此方向的任何幫助表示贊賞。

到目前為止一切順利,只適合添加修改轉換規范,例如

[
  {
    "operation": "shift",
    "spec": {
      "TRADE*": {
        "TRADE*": {
          "TRADE*": {
            "*": {
              "@": "a[&1].TRADERECORD",
              "@(2,TRADE_NUM)": "a[&1].TRADERECORD.TRADE_NUM",
              "@(2,PACKAGE_GUID)": "a[&1].TRADERECORD.PACKAGE_GUID",
              "@(0,TRADETYP)": "b[#1].TRADETYPALLLINES",
              "@(0,TRANSPORT_CODE)": "b[#1].TRANSPORT_CODE_ALLLINES"
            }
          }
        }
      }
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "a": {
        "*": {
          "TRADER*": {
            "TRADETYPALLLINES": "@(4,b[0].TRADETYPALLLINES)",
            "TRANSPORT_CODE_ALLLINES": "@(4,b[0].TRANSPORT_CODE_ALLLINES)"
          }
        }
      }
    }
  },
  {
   // get rid of object labels
    "operation": "shift",
    "spec": {
      "a": {
        "*": ""
      }
    }
  }
]

http://jolt-demo.appspot.com/網站上的演示是:

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM