[英]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.