Python 中扁平化 JSON 物件


JSON(JavaScript 物件表示法)是一種輕量級的資料交換格式。它廣泛用於 Web 應用程式中,用於在伺服器和客戶端之間傳輸資料。JSON 資料通常以巢狀格式出現,這可能難以操作。扁平化 JSON 物件涉及將複雜的層次結構 JSON 結構轉換為更簡單的結構。當分析 JSON 資料或將其轉換為其他格式時,通常需要此過程。在本博文中,我們將探討在 Python 中扁平化 JSON 物件的過程。

語法

Python 具有內建的 JSON 模組,該模組提供用於編碼解碼 JSON 資料的函式。

data= <json-data-here>
flattened_data = flatten(data, "_")

我們使用一個名為 flatten-json 的外部庫來舉例說明。使用以下命令安裝它:

pip install flatten-json

演算法

扁平化 JSON 物件的過程包括以下步驟:

  • 建立一個空字典來儲存扁平化的資料。

  • 遞迴遍歷 JSON 物件。

  • 如果值為字典,則對函式進行遞迴呼叫。

  • 如果值不是字典,則將鍵值對新增到步驟 1 中生成的字典中。

示例

考慮以下巢狀的 JSON 物件:

{
   "name": "John",
   "age": 30,
   "address": {
      "street": "123 Main St",
      "city": "New York",
      "state": "NY"
   }
}

我們可以使用以下 Python 程式碼扁平化此物件:

import json

def flatten_json(nested_json):
   flattened_json = {}

   def flatten(x, name=''):
      if type(x) is dict:
         for a in x:
            flatten(x[a], name + a + '_')
      else:
         flattened_json[name[:-1]] = x

   flatten(nested_json)
   return flattened_json

nested_json = {
   "name": "John",
   "age": 30,
   "address": {
      "street": "123 Main St",
      "city": "New York",
      "state": "NY"
   }
}

flattened_json = flatten_json(nested_json)

print(json.dumps(flattened_json, indent=4))

輸出

{
   "name": "John",
   "age": 30,
   "address_street": "123 Main St",
   "address_city": "New York",
   "address_state": "NY"
}

解釋

  • 建立 flatten json 函式,該函式接受巢狀的 JSON 物件作為輸入並生成扁平化的 JSON 物件。

  • 為了儲存扁平化的資料,該方法生成一個名為 flattened json 的空字典。

  • 然後定義一個名為flatten的內部函式,它接受兩個引數:name,當前鍵字首,以及 x,當前值。如果當前值為字典,則此函式將使用當前值和當前鍵字首重複呼叫。

  • 如果當前值不是字典,則當前鍵值對將新增到 flattened json 字典中。

  • 最後,使用輸入的 JSON 物件執行 flatten 方法並返回 flattened json 字典。

要扁平化此 JSON 物件,我們可以使用 flatten_json 庫,如下所示:

import json
from flatten_json import flatten

json_data = """
{
   "id": 1,
   "name": "John",
   "age": 30,
   "friends": [
      {
         "id": 2,
         "name": "Jane",
         "age": 28
      },{
         "id": 3,
         "name": "Bob",
         "age": 35,
         "location": {
            "city": "New York",
            "state": "NY"
         }
      }
   ]
}
"""

# Convert JSON string to Python object
data = json.loads(json_data)

# Flatten JSON object
flattened_data = flatten(data, "_")

print(flattened_data)

輸出

{'id': 1, 'name': 'John', 'age': 30, 'friends_0_id': 2, 
'friends_0_name': 'Jane', 'friends_0_age': 28, 'friends_1_id': 3, 
'friends_1_name': 'Bob', 'friends_1_age': 35, 
'friends_1_location_city': 'New York', 'friends_1_location_state': 
'NY'}

在這種情況下,flatten 函式已扁平化 JSON 物件,並使用指定的間隔符(在本例中為下劃線 (_))分隔鍵。在組合父物件中的鍵和巢狀物件中的鍵之後,相應地設定值。

應用

扁平化 JSON 物件是 Web 開發、資料分析和機器學習中的一項常見任務。它有助於簡化資料處理、降低複雜性並使資料更易於使用。扁平化 JSON 物件的一些具體應用包括:

  • 將 JSON 資料儲存在關係資料庫中

  • 使用 SQL 處理 JSON 資料

  • 使用機器學習演算法分析 JSON 資料

  • 使用圖表和圖形視覺化 JSON 資料

結論

扁平化 JSON 物件是一種有價值的方法,可以透過它使 JSON 資料結構更簡單、更易於管理。還有其他一些額外的技術可用,而 Python 中的 flatten json 包提供了一種快速有效的方法來扁平化 JSON 資料。透過學習如何扁平化 JSON 物件,可以改進您的資料處理程式,並使您的應用程式更有效、更具可擴充套件性。

更新於: 2023年8月21日

4K+ 閱讀量

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.