在本連線學習路徑中,我們將建立一個 Chain,說明如何將 JSON 資料集轉換為 CSV。在這個範例資料集中,有一個巢狀物件陣列。
此路徑強化了我們在 JSON 資料練習中所學到的循環概念,以及在 JSON Nested Objects 路徑中所學到的笛卡兒連接概念。如果您尚未完成這些路徑,我們強烈建議您在完成本路徑之前先完成這些路徑。
| 主要學習目標 | JSON Connector 功能 |
| 次要學習目標 | 表格轉換進階查詢指令、迭代和變數轉換的威力 |
| 必要條件 | |
| 支援鏈結模板 | CLP | 存取巢狀物件的 JSON 陣列 |
步驟 1:建立鏈條
- 新增連鎖
- 命名該鏈:CLP | 存取巢狀物件的 JSON 陣列
- 建立連鎖變數
- 儲存鏈
步驟 2:擷取 JSON 資料
使用 HTTP Connector 從網路位置擷取甜甜圈資料。此資料集說明一個具有巢狀物件 (屬性) 陣列 (多個項目) 的較複雜 JSON 資料集的範例。
- 從 HTTP Connector 新增一個 GET 指令到 Start 節點。
- 設定命令如下:
| 名稱 | GET - 所有甜點 |
| 使用者名稱 | <leave blank> |
| 密碼 | <leave blank> |
| CA 憑證 | <leave blank> |
| 憑證 | <leave blank> |
| 憑證私密金鑰 | <leave blank> |
| 顯示回應 | 已核取 |
| URL | cv-JSON-AllDonut 鏈式變數 |
| 查詢字串 | <leave blank> |
| 內容類型 | 應用程式/json |
| 回覆 | <leave blank> |
- 儲存指令
步驟 3:將 JSON 轉換為 CSV
使用 JSON Connector 從 JSON 陣列中提取鍵,以識別不同的甜甜圈種類。
以下是 all-donuts JSON 的模式,以供參考:
結構描述
[{"id":"0001","type":"donut","name":"Cake","ppu":0.55,"batters":{"batter":[{"id":"1001","type":"Regular"},{"id":"1002","type":"Chocolate"},{"id":"1003","type":"Blueberry"},{"id":"1004","type":"Devil's Food"}]},"topping":[{"id":"5001","type":"None"},{"id":"5002","type":"Glazed"},{"id":"5005","type":"Sugar"},{"id":"5007","type":"Powdered Sugar"},{"id":"5006","type":"Chocolate with Sprinkles"},{"id":"5003","type":"Chocolate"},{"id":"5004","type":"Maple"}]},{"id":"0002","type":"donut","name":"Raised","ppu":0.55,"batters":{"batter":[{"id":"1001","type":"Regular"}]},"topping":[{"id":"5001","type":"None"},{"id":"5002","type":"Glazed"},{"id":"5005","type":"Sugar"},{"id":"5003","type":"Chocolate"},{"id":"5004","type":"Maple"}]},{"id":"0003","type":"donut","name":"Old Fashioned","ppu":0.55,"batters":{"batter":[{"id":"1001","type":"Regular"},{"id":"1002","type":"Chocolate"}]},"topping":[{"id":"5001","type":"None"},{"id":"5002","type":"Glazed"},{"id":"5003","type":"Chocolate"},{"id":"5004","type":"Maple"}]}]
- 從JSON Connector 新增Array to CSV Command 到 Chain。
- 將 Start Node (GET - All Desserts) 連接到Array to CSV Command。
- 命名命令:Array to CSV - Get Variety 。
- 在JSON Data 參數中,選擇Response Output from theGET - All Desserts Command。
- 將Input Text,Path to root, 和Filter 參數留空。
- 將多值分隔符 參數留為逗號 (, )。
- 勾選Preview Result 選項。
- 為Column Name 輸入variety ,並為JSONPath 參數輸入.name 。
- 為Delimiter 參數選擇Pipe 。
- 儲存指令
步驟 4:建立可迭代資料集
如前所述,資料集有一個巢狀物件的陣列(即多個項目)。若要單獨處理每個品種,必須將行號加入資料集中。這些行號將用於隨後的 Array to CSV Commands(陣列轉 CSV 指令),以識別巢狀物件(屬性)將被解析的陣列項目(甜甜圈)。
對於熟悉 Chain Builder 的人,您可能會想知道為什麼我們使用 Advanced Query 而不是 Add Row Numbers Command。Add Row Numbers 指令從 1 (1) 開始計數,我們需要從 0 (0) 開始計數,因為 JSON 陣列是以 0 為基礎的。
- 從Tabular Transformation Connector 新增Advanced Query Command 到 Chain。
- 連接Array to CSV - Get Variety 指令到Advanced Query 指令。
- 命名命令:進階查詢 - 新增行號 。
- 配置表部分
- 在File 字段中,指定Converted File Output from theArray to CSV - Get Variety Command。
- 在Table Name 參數中輸入varieties 。指定的查詢將針對此表執行。
- 在查詢參數中,輸入下列內容:
SELECT
ROW_NUMBER () OVER (
ORDER BY variety
)-1 RowNum,
variety
FROM
varieties
- 為Input Delimiter 及Output Delimiter 參數分別指定Pipe&Comma。
- 檢查預覽結果 參數。
- 儲存指令。
步驟 5:建立 JSON 陣列
使用 JSON Connector 的 CSV 至 JSON 指令,將唯一的品種清單轉換為 JSON 陣列。然後,指令群組可以遍歷此陣列中的每個項目。
- 從JSON Connector 新增CSV to JSON Command 到 Chain。
- 將Advanced Query - Add Row Numbers Command 連接到CSV to JSON Command。
- 使用下列內容設定指令:
| 名稱 | CSV 至 JSON - Varieties |
| 輸入檔 | 結果 進階查詢 - 新增行號 指令的輸出 |
| 分隔符號 | 逗號 (,) |
- 儲存指令
步驟 6:新增指令群組
在連鎖中加入指令群組,以啟用在進階查詢步驟中確認的每個甜甜圈品種的迭代。
- 在連鎖中加入指令群組 。
- 將CSV to JSON - Varieties 指令連接到在 指令群組的部分。
- 按一下指令群組,然後選擇滴管圖示,將指令顏色變更為黃色 。
- 命名組:將群命名為:Donut Varieties 。
- 啟用Iterations 切換,並選擇JSON File 從CSV 到 JSON - Varieties 指令的輸出 。
- 儲存指令群組。
步驟 7:取得餡料清單
使用 JSON Connector 的 Array to CSV 指令,取得巢狀 JSON 陣列中的配料清單。每個甜甜圈品種都會重複此動作。
⚠ 請特別注意下列步驟中以紅色感嘆號標示的注意事項。
- 從JSON Connector 新增Array to CSV Command 到 Chain。
- 從Donut Varieties 指令群組連接Group Start 到Array to CSV 指令。
- 命名該命令:將命令命名為:Array to CSV - Toppings 。
- 在JSON Data 參數中,選擇GET - All Desserts 指令的回應 輸出。
- 將Input Text 參數留空。
- 在Path to root 參數中,我們將利用迭代值來指定迭代所要操作的陣列項。
- 以下步驟是關鍵 ,在 完成此步驟前,應先完整閱讀。
- 在Path to root 參數中按一下。 從「變數」選項窗格,展開Group Iterator ,然後按一下JSON File Iteration 。
- 在 Path to root 參數中按一下綠色的JSON File Iteration 氣泡。這將會開啟變數轉換表單。選擇從 JSON 取得值 ,然後按一下加號 (+)。在Value 欄位中輸入RowNum (區分大小寫) 並按下 Enter 鍵。按一下「接受」(Accept)。
- 該變數應具有星號,表示已套用變數轉換。
- 🛑 如果上述任何步驟失敗,請從 Path to root 刪除 JSON File Iteration 變數,然後重新開始。
- 在 JSON File Iteration 冒泡後,輸入topping (小寫) 並按下 Enter 鍵。
- 以下步驟是關鍵 ,在 完成此步驟前,應先完整閱讀。
- 將Filter 參數留空。
- 將Multi-value Delimiter 參數的預設值保留為逗號 (,)。
- 勾選預覽結果 選項。
- 在 「列 」部分,我們指定 JSON 陣列中的關鍵,以提取值到結果 CSV 中的一列。
- 在Column name 參數中,輸入topping ,在JSONPath 參數中,輸入.type.
- 在Delimiter 參數中,選擇Comma 。
- 儲存指令。
步驟 8:取得打者清單
使用 JSON Connector 的 Array to CSV 指令,取得巢狀 JSON 陣列中的打擊者清單。每個甜甜圈品種都要重複此動作。由於這個步驟與上一個步驟非常類似,因此複製上一個步驟中設定的 Command,並針對面糊資訊進行簡單的更新。
- 複製Array to CSV - Toppings 指令。
- 從Donut Varieties 指令群組連接Group Start 到Array to CSV - Toppings (Copy) 指令。
- 命名複製的指令:Array to CSV - Batters 。
- 在Path to root 參數中,按一下 X 鍵刪除頂泡。鍵入batters (大小寫敏感的) 並按 Enter。接著輸入batter ,然後按 Enter。在 Path to root 參數中應該有三個 氣泡。
- JSON 檔案迭代 *
- batters
- 面糊
- 在 「列 」部分中,將 「列名稱 」從topping 變更為batter 。
- 儲存指令
步驟 9:壓縮資料
類似於上一個練習,使用 Tabular Transformation Connector 的 Advanced Query Command 中的 Cartesian 連結來扁平化資料集。
- 從Tabular Transformation Connector 新增Advanced Query Command 到 Chain。
- 連接Array to CSV - Batters 和Array to CSV - Toppings 指令到Advanced Query 指令。
- 命名命令:進階查詢 - 壓平 JSON 物件 。
- 在表格 區段中,按一下新增 按鈕,這樣就有兩個可用的表格。根據下列內容完成「表格」部分:
| 檔案 | 表格名稱 |
| 轉換檔案 從陣列輸出至 CSV - Batters 指令 | 擊球員 |
| 轉換檔案 由陣列輸出至 CSV - Toppings 指令 | Topping |
-
在查詢參數中,輸入下列查詢:
從 Batter,Topping 中選擇 '<JSON>' 作為 Variety,Batter,Topping
-
- <JSON> 應從變數窗格中展開Group Iterator 並選擇JSON File Iteration 來選擇和替換。
- 選取 JSON 檔案迭代變數後,按一下綠色氣泡,此時會開啟變數變換表單。
- 套用Get Value from JSON 變數轉換,使用variety 作為 Value 欄位。
- 請務必在輸入多樣性後按下 Enter,並接受轉換!
- 為Input Delimiter 和Output Delimiter 參數指定Comma 。
- 檢查預覽結果 選項。
- 儲存指令。
步驟 9:測試練習
- 發表鏈結。
- 按一下執行 ,然後選擇執行 Chain 。
- 一旦完成 Chain、
- 按一下 Advanced Query - Flatten JSON Object 節點,然後選擇 Outputs 索引標籤。確認每次迭代的記錄數:
- 迭代 1:28 個記錄
- 迭代 2:5 個記錄
- 迭代 3:8 個記錄
- 按一下預覽結果 (眼睛圖示) 確認每個迭代的資料是否相符。
- 按一下 Advanced Query - Flatten JSON Object 節點,然後選擇 Outputs 索引標籤。確認每次迭代的記錄數:
若要瞭解更多關於使用 Chains 進行資料轉換的資訊,請查看Connected Learning Paths - Transformation Introduction !