JSON解析
DataWorks數(shù)據(jù)集成實時ETL支持JSON解析組件使用,可以在來源與去向組件間新增JSON解析組件,對來源側(cè)的JSON數(shù)據(jù)解析成相應(yīng)的表數(shù)據(jù)。
前提條件
已完成數(shù)據(jù)集成的基本配置與網(wǎng)絡(luò)資源配置。
數(shù)據(jù)集成的同步類型為單表實時。
創(chuàng)建并配置JSON解析組件
步驟一:配置數(shù)據(jù)集成任務(wù)
新建數(shù)據(jù)源,詳情請參見:創(chuàng)建并管理數(shù)據(jù)源。
新建數(shù)據(jù)集成任務(wù),詳情請參見:數(shù)據(jù)集成側(cè)同步任務(wù)。
說明當(dāng)數(shù)據(jù)集成側(cè)同步任務(wù)的同步類型為單表實時,可在數(shù)據(jù)來源組件與數(shù)據(jù)去向組件之間新增數(shù)據(jù)處理組件。詳情可參見支持的數(shù)據(jù)源及同步方案。
步驟二:添加JSON解析組件
在實時ETL任務(wù)編輯頁DAG畫布中,單擊來源與去向組件之間的按鈕,新增選擇JSON解析組件。
配置JSON解析組件。
增加JSON解析固定字段
獲取JSON格式化數(shù)據(jù)。
獲取JSON方式
說明
圖示
解析JSON固定字段。
單擊增加JSON解析固定字段打開JSON解析固定字段彈窗,通過選擇來源字段后,單擊獲取JSON數(shù)據(jù)結(jié)構(gòu)后獲取JSON數(shù)據(jù)結(jié)構(gòu)。
手動上傳字段JSON。
單擊增加JSON解析固定字段打開JSON解析固定字段彈窗,由于無法順利獲取到上游字段取值,或獲取到的字段取值不符合JSON規(guī)范,則需要單擊JSON文本編輯按鈕,在彈出的JSON文本編輯彈窗內(nèi)手動輸入JSON內(nèi)容,單擊確定來格式化上傳的JSON內(nèi)容。
在格式化展示JSON數(shù)據(jù)結(jié)構(gòu)中單擊選擇葉子字段,會自動在固定輸出字段中添加一條對應(yīng)的解析配置。
JSON解析葉子節(jié)點生成表格示例。
在格式化展示JSON數(shù)據(jù)結(jié)構(gòu)中選擇要解析的目標(biāo)字段,選擇JSON對象時,會出現(xiàn)彈窗,可選擇如下解析方式:
添加json object內(nèi)每一個key-value為單獨字段,其中key為字段名,賦值為其對應(yīng)的value。
添加json object整體為一個字段,取值為對象的json string。
選項
圖示操作
解析效果展示
以圖示操作中的JSON為例,單擊address字段后的按鈕,在彈窗內(nèi)選擇添加json object內(nèi)每一個key-value為單獨字段,其中key為字段名,賦值為其對應(yīng)的value。
則會解析出三個字段:
street
、city
、zip
,分別賦值于這三個字段值以圖示操作中的JSON為例,單擊address字段后的按鈕,在彈窗內(nèi)選擇添加json object整體為一個字段,取值為對象的json string。
會將整個address解析成為一個完整的一條數(shù)據(jù),賦值內(nèi)容包含了
street
、city
、zip
三個字段。在格式化展示JSON數(shù)據(jù)結(jié)構(gòu)中選擇要解析的目標(biāo)字段,選擇JSON數(shù)組時,會出現(xiàn)彈窗,可選擇如下解析方式:
添加數(shù)組為多行輸出。
添加數(shù)組整體為一個字段,取值為數(shù)組的 JSON string。
選項
圖示操作
解析效果展示
以圖示操作中的JSON為例,單擊array1和array2字段后的按鈕,選擇在彈窗內(nèi)選擇添加數(shù)組為多行輸出。
說明如果數(shù)組內(nèi)還是key:value對,且value還是一個數(shù)組,這塊不會解析到value中的數(shù)組值。
以圖示操作中的JSON為例,單擊array字段后的按鈕,選擇添加數(shù)組整體為一個字段,取值為數(shù)組的json string。
手動新增字段,指的是當(dāng)無法順利獲取上游字段取值時,也沒有通過單擊JSON文本編輯按鈕手動上傳字段JSON內(nèi)容情況下手動定義固定字段解析規(guī)則,通過手動編輯取值內(nèi)容的方式,來獲取JSON內(nèi)容,手動新增的詳細參數(shù)如下:
參數(shù)
說明
字段名
解析得到的新字段在下游節(jié)點的引用名。
取值
用來指定JSON解析路徑,解析語法如下:
$
:表示根節(jié)點。.
:表示子節(jié)點。[]
:[number]
表示數(shù)組下標(biāo),從0開始。[*]
:展開數(shù)組多行輸出,每個元素與記錄其他字段組裝成獨立一行記錄往下游節(jié)點輸出。
說明JSON解析路徑中的JSON字段名只允許字母、數(shù)字、中劃線“-”和下劃線“_”。
默認值
當(dāng)上游表字段發(fā)生變化導(dǎo)致JSON取值路徑不存在時的默認值。
NULL:字段賦值為NULL。
不填充:字段不填充任何值,與選擇NULL效果的區(qū)別在于寫入目標(biāo)表對應(yīng)字段時,如果目標(biāo)字段配置了默認值,則會使用這個默認值,而不是NULL。
臟數(shù)據(jù):計入同步任務(wù)臟數(shù)據(jù)統(tǒng)計并根據(jù)臟數(shù)據(jù)容忍配置決定是否異常退出。
手動輸入常量:使用手動輸入常量作為字段賦值。
增加JSON解析動態(tài)字段
獲取JSON格式化數(shù)據(jù)。
獲取JSON方式
說明
圖示
解析JSON動態(tài)輸出字段
單擊增加JSON解析動態(tài)字段打開JSON解析動態(tài)輸出字段彈窗,通過選擇來源字段后,單擊獲取JSON數(shù)據(jù)結(jié)構(gòu)后獲取JSON數(shù)據(jù)結(jié)構(gòu)。
手動上傳字段JSON
單擊增加JSON解析動態(tài)字段打開JSON解析動態(tài)輸出字段彈窗,由于無法順利獲取到上游字段取值,或獲取到的字段取值不符合JSON規(guī)范,則需要單擊JSON文本編輯按鈕,在彈出的JSON文本編輯彈窗內(nèi)手動輸入JSON內(nèi)容,單擊確定來格式化上傳的JSON內(nèi)容。
動態(tài)解析JSON對象。
在格式化展示的JSON內(nèi)容中選擇要做動態(tài)解析的目標(biāo)JSON對象字段,系統(tǒng)會自動在固定輸出字段中添加JSON對象下每個字段的解析配置。
設(shè)置動態(tài)解析JSON對象,在同步任務(wù)實際運行中,會將每條指定路徑下的JSON對象的每個字段,以原JSON字段名和字段值用STRING類型添加到記錄中往下游節(jié)點輸出,這樣在同步運行過程中,當(dāng)指定的JSON對象結(jié)構(gòu)發(fā)生了變化或新增字段時,也能自動識別并向下游輸出。
詳情可參考下圖:
解析對象變化前:
解析對象變化后:
解析效果展示。
_value_(STRING)
c1(STRING)
c2(STRING)
c3(STRING)
{ "dynamic": { "c1": 2, "c2": ["a1","b1"] } }
2
["a1","b1"]
未填充
{ "dynamic": { "c1": 2, "c2": ["a1","b1"], "c3": {"name": "jack"} } }
2
["a1","b1"]
{"name": "jack"}
手動新增字段。
手動新增字段,指的是當(dāng)無法順利獲取上游子字段取值時,也沒有通過單擊JSON文本編輯按鈕手動上傳字段JSON內(nèi)容情況下手動定義固定字段解析規(guī)則,通過手動編輯取值內(nèi)容的方式自定義動態(tài)字段解析規(guī)則:
參數(shù)
描述
指定JSON對象
指定JSON對象解析路徑,解析語法如下:
$
:表示根節(jié)點。.
:表示子節(jié)點。[]
:[number]表示數(shù)組下標(biāo),從0開始。
注:JSON解析路徑中的JSON字段名只允許字母、數(shù)字、中劃線"-"和下劃線"_"。
默認值
指定當(dāng)指定的JSON解析路徑解析失敗,或者對應(yīng)字段不存在時的默認行為。
忽略
:不做動態(tài)解析。臟數(shù)據(jù)
:計入同步任務(wù)臟數(shù)據(jù)統(tǒng)計并根據(jù)臟數(shù)據(jù)容忍配置決定任務(wù)是否異常退出。
發(fā)現(xiàn)與已有字段重名時策略。
JSON動態(tài)字段按照key-value做展開時,只展開第一層,如果后展開的字段發(fā)現(xiàn)已有同名字段時需要采取的策略。策略詳情如下:
覆蓋:以后展開的value取代已有字段value。
丟棄:保持已有字段的value,丟棄后展開的value。
報錯:任務(wù)報錯,停止運行。
后續(xù)操作
完成來源信息、JSON解析以及去向信息的配置后,可單擊右上角的模擬運行,對數(shù)據(jù)集成任務(wù)進行模擬運行,以便查看輸出數(shù)據(jù)結(jié)果,是否符合您的需求。