python json反序列化為物件

TechSynapse發表於2024-06-23

在Python中,將JSON資料反序列化為物件通常意味著將JSON格式的字串轉換為一個Python的資料結構(如列表、字典)或者一個自定義的類例項。雖然Python的標準庫json模組不提供直接將JSON資料對映到類的例項的功能,但我們可以透過一些技巧來實現這個需求。

以下是一個詳細的示例,展示瞭如何使用Python的json模組和自定義類來將JSON資料反序列化為類的例項:

首先,定義一個Python類,該類將表示我們的JSON資料中的物件:

class Person:  
    def __init__(self, name, age, occupation):  
        self.name = name  
        self.age = age  
        self.occupation = occupation  
  
    def __repr__(self):  
        return f"Person(name={self.name}, age={self.age}, occupation={self.occupation})"

然後,我們可以使用json.loads()函式將JSON字串解析為Python的字典,並使用這個字典來初始化我們的類的例項。但是,為了更方便地做到這一點,我們可以編寫一個輔助函式來處理這個轉換:

import json  
  
def json_to_person(json_str):  
    # 解析JSON字串為Python字典  
    data = json.loads(json_str)  
    # 使用字典中的資料來初始化Person類的例項  
    return Person(data['name'], data['age'], data['occupation'])  
  
# 示例JSON字串  
json_data = '''  
{  
    "name": "Alice",  
    "age": 30,  
    "occupation": "Engineer"  
}  
'''  
  
# 使用輔助函式將JSON字串轉換為Person類的例項  
person = json_to_person(json_data)  
print(person)  # 輸出: Person(name=Alice, age=30, occupation=Engineer)

在這個示例中,json_to_person()函式是一個簡單的幫助函式,它首先使用json.loads()將JSON字串解析為Python字典,然後使用這個字典中的資料來建立一個Person類的例項。這樣,我們就可以很容易地將JSON資料轉換為Python物件了。

需要注意的是,這個示例假設我們的JSON資料的結構與我們的類的屬性完全匹配。如果JSON資料的結構更復雜,或者與我們的類的屬性不完全匹配,我們可能需要編寫更復雜的邏輯來處理這種情況。

下面是一個更具體的程式碼示例,展示瞭如何使用Python的json模組將JSON字串反序列化為一個自定義類的例項。在這個例子中,我們將考慮一個稍微複雜的JSON結構,其中包含一個列表,列表中的每個元素都是一個表示人員的字典。

首先,定義表示人員的Python類:

class Person:  
    def __init__(self, name, age, occupation):  
        self.name = name  
        self.age = age  
        self.occupation = occupation  
  
    def __repr__(self):  
        return f"Person(name={self.name}, age={self.age}, occupation={self.occupation})"  
  
    # 靜態方法,用於從字典建立Person例項  
    @staticmethod  
    def from_dict(person_dict):  
        return Person(person_dict['name'], person_dict['age'], person_dict['occupation'])

注意這裡我們新增了一個靜態方法from_dict,它將從字典中建立一個Person例項。

接下來,我們將編寫一個函式,該函式將JSON字串解析為Person物件的列表:

import json  
  
def json_to_persons(json_str):  
    # 解析JSON字串為Python列表,其中每個元素是一個字典  
    data = json.loads(json_str)  
    # 使用列表推導式和Person.from_dict方法建立Person例項的列表  
    return [Person.from_dict(person_dict) for person_dict in data]  
  
# 示例JSON字串,包含一個人員列表  
json_data = '''  
[  
    {"name": "Alice", "age": 30, "occupation": "Engineer"},  
    {"name": "Bob", "age": 25, "occupation": "Designer"}  
]  
'''  
  
# 使用函式將JSON字串轉換為Person物件的列表  
persons = json_to_persons(json_data)  
  
# 列印結果  
for person in persons:  
    print(person)  
# 輸出:  
# Person(name=Alice, age=30, occupation=Engineer)  
# Person(name=Bob, age=25, occupation=Designer)

在這個例子中,json_to_persons函式首先使用json.loads()將JSON字串解析為一個Python列表,其中每個元素都是一個字典。然後,它使用列表推導式和Person.from_dict靜態方法來建立Person例項的列表。這樣,我們就可以很容易地將包含多個物件的複雜JSON結構轉換為Python物件列表了。

相關文章