使用 JSON

本節說明如何將 JSON 檔案匯入 Cloud Dataprep by TRIFACTA®,將這類檔案轉換為表格格式並進行疊加,然後再以相同的 JSON 格式匯出。

我們將用範例說明此作業的基本工作流程。在範例工作流程中,必須將 JSON 檔案匯入 Cloud Dataprep by TRIFACTA®,將新的資料欄插入 JSON,並且以相同的結構匯出由此產生的 JSON。

JSON 輸入和輸出

輸入:

  • JSON 使用起來很容易,因為檔案中的每個資料列都是一筆記錄。當記錄跨越多個資料列時,應用程式必須透過額外的步驟來將它轉譯成表格格式。本範例使用多資料列 JSON 記錄。

輸出:

  • Cloud Dataprep by TRIFACTA 可以產生 JSON 檔案做為工作的輸出。產生的 JSON 檔案具有以下特徵:
    • 以換行符號分隔:每筆記錄的結尾都是 \n 字元。如果您的下游系統預期得到的是以逗號分隔的記錄 (最後一個除外),則您必須在應用程式之外執行額外的工作。
    • 非巢狀:產生檔案中的每筆記錄都是扁平的。
      • 對於多層結構的 JSON,您可以將資料欄套疊在一起,並將最上層保留為資料網格中的一組資料欄。但是在輸出時,第二層和較低層的資料會在輸出中顯示為加引號的字串值。您必須在應用程式外部執行額外的清理工作。

範例

此範例資料集包含書籍相關資訊。在這種情況下:

  • 資料會以每個資料列一個屬性的方式提交。一筆 JSON 記錄就會跨越許多資料列。
  • 書籍總數是三本。
  • JSON 資料有兩層。
"book": {
  "id": "bk101",
  "author": "Guy, Joe",
  "title": "Json Guide",
  "genre": "Computer",
  "price": "44.95",
  "publish_date": "2002-04-26",
  "characteristics": {
    "cover_color": "black",
    "paper_stock": "20",
    "paper_source": "new"
  },
  "description": "An in-depth look at creating applications."
},
"book": {
  "id": "bk102",
  "author": "Nelson, Rogers",
  "title": "When Doves Cry",
  "genre": "Biography",
  "price": "24.95",
  "publish_date": "2016-04-21",
  "characteristics": {
    "cover_color": "white",
    "paper_stock": "15",
    "paper_source": "recycled"
  },
  "description": "Biography of a prince."
},
"book": {
  "id": "bk103",
  "author": "Fitzgerald, F. Scott",
  "title": "The Great Gatsby",
  "genre": "Fiction",
  "price": "9.95",
  "publish_date": "1925-04-10",
  "characteristics": {
    "cover_color": "blue",
    "paper_stock": "20",
    "paper_source": "new"
  },
  "description": "Classic American novel."
}

JSON 工作流程

  1. 匯入 JSON 檔案。

    注意:您應在匯入的過程中取消選取 [Detect Structure] 選項。您可能需要重新建構初始剖析步驟才能正確使用檔案。詳細做法請見本文後續說明。

  2. 如有需要,將結構鬆散的 JSON 轉換為每個資料列一筆 JSON 記錄。
  3. 將資料拆分到資料欄。
    1. 每一層 JSON 結構都必須單獨拆分。
  4. 當所有 JSON 資料都成為表格格式時,執行任何 Wrangle 轉換。
  5. 如要保留階層,您必須將 JSON 的較低層資料套疊還原成原始的形式。最上層維持不動。
    1. 如果可以寫出扁平的 JSON 記錄,您就可以直接匯出,而不需要再次套疊資料。
  6. 執行工作,產生 JSON 輸出。

步驟 - 匯入檔案

  1. 在「Import Data」頁面中,瀏覽並選取您要匯入的 JSON 檔案。
  2. 載入檔案後,在右側面板中點選資料集資訊卡的 [Edit Settings]。在「Import Settings」對話方塊中,取消選取 [Detect Structure] 核取方塊。
  3. 完成匯入流程的其餘作業。詳情請參閱匯入資料頁面一文。
  4. 將 JSON 匯入資料集加入流程,並為其建立方案。詳情請參閱流程檢視頁面一文。
  5. 選取方案,然後點選 [Edit Recipe…]

步驟 - 轉換為每個資料列一筆 JSON 記錄

注意:只有當匯入資料集中的單筆 JSON 記錄跨越多個資料列時,才需要執行此步驟。如果在轉換器頁面中只有單列 JSON 記錄,請直接跳至下一節。

  1. 在轉換器頁面中,您應會在單個資料欄中看見格式鬆散的 JSON。每個資料列都包含一個單獨的屬性,而且一筆記錄會跨越多個資料列。
  2. 開啟右側的方案面板。資料的初始剖析步驟即會顯示。詳情請參閱初始剖析步驟一文。
  3. 在方案面板中,刪除第一個步驟以外的所有步驟。
  4. 第一個步驟是拆分成資料列的轉換作業。此轉換作業只會在方案的第一步驟中出現。
  5. 選取步驟,然後按一下鉛筆圖示來編輯步驟。
  6. 在轉換製作工具中,分割值可能是 \n 字元。

  7. 此字元會向應用程式傳送信號,告訴它根據換行字元 (\n) 將資料拆分成個別的資料列。然後此轉換作業會根據每個屬性拆分結構鬆散的 JSON。您必須修改分割值,使其只擷取每筆 JSON 記錄的第一個屬性。上述資料集的分割值應如下所示,注意冒號後面的空格:

    "book": 
  8. 按一下 [Add],再次儲存步驟。
  9. 上述資料集現在應該有四個資料列,其中第一個資料列是空的。造成空資料列的原因是在上述字串的第一個參照前插入了 \n。在資料欄直方圖中,選取黑色長條,也就是空的資料列。在右側的「Suggestions」面板中,找到「Delete」資料列建議,然後點選 [Add]。資料列即會被移除。
  10. 現在每筆 JSON 記錄都擁有單獨的資料列。

步驟 - 將 JSON 轉換為物件類型

下一步是將 JSON 記錄轉換為物件類型值的資料欄。物件資料類型是將記錄轉譯成鍵/值組合的一種方法,但是它的結構卻和 JSON 略有不同。以下為將 JSON 轉換為物件資料類型的步驟。

  1. 由於 JSON 使用字元縮排來表現結構,所以您應該先將這些出現在資料集中的縮排移除。以雙層結構為例,您可以使用以下的轉換方法:

    轉換名稱 Replace text or patterns
    參數:資料欄 column1
    參數:尋找 /\n\s*"/
    參數:替換值 \"
    參數:比對所有出現的值 true
    1. 在上述方法中,關鍵詞是「尋找」模式,它是一個規則運算式

      /\n\s*"/
    2. 兩端的正斜線將這個模式定義為規則運算式。
    3. 將中間的內容與換行字元、任意空格數和雙引號的模式進行比對。
    4. 將模式替換為只剩下雙引號,移除了資料集模式的前面部分。
    5. 如要進一步瞭解比對模式,請參閱文字比對一文。
  2. 在標準 JSON 中,逗號用於表示行或記錄的結尾,但資料集中的最後一行或記錄除外。
    1. 在上述範例中,前兩筆記錄的結尾都有逗號。其結尾的片段如下:

      ... "description":"An in-depth look at creating applications."},
      ... "description":"Biography of a prince."},
      ... "description":"Classic American novel."}
    2. 如要將這些記錄轉換為物件類型,必須將前兩個資料列結尾的逗號移除:
      轉換名稱 Replace text or patterns
      參數:資料欄 column1
      參數:尋找 `\n\},\n{end}`
      參數:替換值 }
      參數:比對所有出現的值 true

      1. 這個轉換作業與前一個類似。但在這個轉換作業中,「尋找」模式使用 Cloud Dataprep 模式來表示僅需比對記錄結尾的字元:

        {end}
      2. 如果記錄中套疊了其他的模式,使用此符記可防止系統對這些模式進行比對。
      3. 詳情請參閱文字比對一文。
  3. 記錄應類似下列所示:
    注意:在下方的範例中,有些值太長,一行容納不下。此處以 \ 來表示溢出到另外一行的情況。如果行做為輸入使用,則不應包含反斜線。

    {"id": "bk101","author": "Guy, Joe","title": "Json Guide","genre": "Computer", \
    "price": "44.95","publish_date": "2002-04-26",{"cover_color": "black", \
    "paper_stock": "20","paper_source": "new"}, \
    "description": "An in-depth look at creating applications."}
  4. 這些記錄適合轉換為物件資料類型。
  5. 如要變更資料欄的資料類型,請按一下資料欄標頭左側的圖示。選取 [Object]。
  6. 資料欄資料類型即會變更為物件。變更資料類型的步驟也會加入您的方案中。
  7. 如果資料欄直方圖顯示了一些不相符的記錄。
    1. 查看這些記錄,以確定有哪些格式上的錯誤。
    2. 刪除將資料類型變更為物件的方案步驟。
    3. 進行必要的修改。
    4. 切換回物件資料類型。視需要進行疊代處理,直到所有記錄都有效並且資料欄轉換為物件類型為止。

步驟 - 拆分 JSON 記錄

下一步是將 JSON 記錄轉換為表格格式。

注意:對於具有多層結構的 JSON 記錄,您應先拆分最上層的結構,然後再依序拆分其下的結構。

提示:最簡單的拆分方法是選取含有物件資料的資料欄標頭。標頭選項中應會包含拆分這個選項。如果沒有,請依照下列程序操作。

  1. 在方案面板中,點選 [New Step]。
  2. 在「Search」面板中輸入 unnest object elements
  3. 指定以下轉換作業。將下方的元素路徑值替換為 JSON 記錄中最上層的鍵:

    轉換名稱 Unnest object elements
    參數:資料欄 column1
    參數:元素路徑1 id
    參數:元素路徑2 author
    參數:元素路徑3 title
    參數:元素路徑4 genre
    參數:元素路徑5 price
    參數:元素路徑6 publish_date
    參數:元素路徑7 description
    參數:從原始資料移除元素 true

    1. 在上述轉換作業中,每個元素路徑項目都表示 JSON 記錄中的一個鍵。鍵的關聯值會成為新資料欄中的值,並且其名稱將與鍵相同。
    2. 所以,此步驟會將指定鍵的鍵/值組合拆分到資料集的不同資料欄中。

      提示:您可以選擇將原始資料從來源中移除。在更深或更寬的 JSON 檔案中,移除原始資料將有助於識別還有哪些內容還未拆分。

  4. 在下一層結構中,重複執行上述程序。在範例中,此步驟為拆分 characteristics 節點:

    轉換名稱 Unnest object elements
    參數:資料欄 column1
    參數:元素路徑1 characteristics.cover_color
    參數:元素路徑2 characteristics.paper_stock
    參數:元素路徑3 characteristics.paper_source
    參數:從原始資料移除元素 true
  5. 您現在可以刪除 column1。在 column1 右側的資料欄選單中,選取 [Delete]。
  6. 現在您已將 JSON 轉換為表格格式。

    提示:如果需要對多個檔案套用上述步驟,您可以考慮停止工作並返回流程檢視頁面。選取此方案並點選 [Add New Recipe]。如果您在其他方案中加入了後續的步驟,則第一個方案可用來對 JSON 檔案進行初步處理,與用來進行個別檔案疊加的方案區隔開來。

    提示:在拆分過程中,可能會將一些資料欄移動到與在 JSON 中的原本順序位置不同的地方。請使用資料欄選單中的 [Move] 指令來重新調整資料欄的位置。

步驟 - 疊加資料集

JSON 資料已準備好進行疊加。

以下範例會建立一個 discount 資料欄。如果出版日期在 2000/01/01 之前,則折扣為 0.1 (10%):

轉換名稱 New formula
參數:公式類型 Single row formula
參數:公式 IF(publish_date < DATE(2000, 1, 1), 0.1, 0)
參數:新資料欄名稱 discount

繼續加入步驟,直到已完成需要的資料轉換作業,並且準備好執行工作。

步驟 - 套疊 JSON 記錄

注意:如果您需要的 JSON 輸出不含多層結構,可以跳過此步驟。產生的 JSON 檔案會是每個資料列一筆 JSON 記錄。

如果使用到目前為止所建立的方案來對範例資料執行工作,應用程式會產生無階層且以換行符號分隔的 JSON 檔案。但由於資料集具有兩層結構,因此 characteristics 階層中的元素會以下列方式寫出:

"characteristics.cover_color":"black","characteristics.paper_stock":20,"characteristics.paper_source":"new",
"characteristics.cover_color":"white","characteristics.paper_stock":15,"characteristics.paper_source":"recycled",
"characteristics.cover_color":"blue","characteristics.paper_stock":20,"characteristics.paper_source":"new",

您可以採用下列其中一種方法:

  1. 產生具有扁平結構的 JSON 檔案。輸出如上所示。使用外部工具來將第二層和較低層的結構妥善地拆分。
  2. 重新套疊較低層的結構,直到擁有一個扁平的記錄為止,其中會包含一些保留基礎階層結構的物件類型資料欄。當重新套疊的 JSON 記錄匯出後,次要階層結構會以逸出字串值的形式顯示。此部分稍後會再詳細說明。

如要重新套疊較低層的資料,您可以使用以下方法。

提示:下列步驟會重塑您的資料。您可能想要建立一個新方案做為前一個方案的輸出,以在其中加入以下步驟。

  1. 當您重新套疊時,請從最低層向最高層套疊。
  2. 在本範例中,以下資料欄應套疊在一起:characteristics.cover_colorcharacteristics.paper_stockcharacteristics.paper_source

    轉換名稱 Nest columns into Objects
    參數:資料欄1 characteristics.cover_color
    參數:資料欄2 characteristics.paper_stock
    參數:資料欄3 characteristics.paper_source
    參數:將資料欄套疊成 Object
    參數:新資料欄名稱 characteristics
  3. 在產生的 characteristics 資料欄中,您可以將 characteristics. 從鍵值中移除:

    轉換名稱 Replace text or patterns
    參數:資料欄 characteristics
    參數:尋找 `characteristics.`
    參數:替換值 (empty)
  4. 現在,請刪除三個來源資料欄:

    轉換名稱 Delete columns
    參數:資料欄1 characteristics.cover_color
    參數:資料欄2 characteristics.paper_stock
    參數:資料欄3 characteristics.paper_source
  5. 對資料集中的下一層資料重複執行上述步驟。

    注意:請勿套疊最上層的資料欄。

步驟 - 產生 JSON 輸出

當您準備就緒時,就可以開始執行工作。建立或修改發佈動作,以產生一個 JSON 檔案做為輸出。請參閱執行工作頁面一文。

工作完成後,您可以點選工作詳細資料頁面的「Output Destinations」分頁中的 JSON 連結,以下載 JSON 檔案。請參閱工作詳細資料頁面一文。

步驟 - 最後清理

在應用程式之外,您可能還需要執行以下工作:

  1. 由於 JSON 輸出是以換行符號分隔的檔案,您的下游系統可能需要您在每筆記錄 (最後一筆除外) 的結尾加上逗號。
  2. 如果您在扁平記錄中重新套疊了 JSON 階層結構,次要階層結構的匯出 JSON 會以加引號字串的形式顯示,如下所示:

    "characteristics":"{\"cover_color\":\"black\",\"paper_stock\":\"20\",\"paper_source\":\"new\"}",
    "characteristics":"{\"cover_color\":\"white\",\"paper_stock\":\"15\",\"paper_source\":\"recycled\"}",
    "characteristics":"{\"cover_color\":\"blue\",\"paper_stock\":\"20\",\"paper_source\":\"new\"}",

    您可以用簡單的搜尋及替換方法來修正這些加引號的字串。

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Google Cloud Dataprep 說明文件
需要協助嗎?請前往我們的支援網頁