如何在 Python JSON 序列化中處理非 JSON 可序列化型別?

Mary-Kate Olsen
發布: 2024-10-25 00:28:30
原創
205 人瀏覽過

How to Handle Non-JSON Serializable Types in Python JSON Serialization?

在JSON 序列化中處理非JSON 可序列化類型

問題:
問題:編碼包含自自>定義的Python 集合具有

hash

eq 的物件會在json.dumps 方法中引發TypeError。

<code class="python">import json

class SetEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, set):
            return list(obj)
        return json.JSONEncoder.default(self, obj)</code>
登入後複製
集合的自訂編碼器:

您可以建立一個自訂編碼器,透過在編碼之前將集合轉換為清單來處理集合:

<code class="python">class CustomEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime.datetime):
            return obj.isoformat()
        return json.JSONEncoder.default(self, obj)</code>
登入後複製
處理巢狀和複雜類型:

要自訂巢狀和複雜類型的編碼方式,您可以覆寫編碼器中的預設方法以考慮各種資料類型。例如,要處理日期,您可以使用以下命令:

處理鍵到值的轉換:JSONEncoder 中的預設方法將您定義的轉換套用至物件中的所有值。它不區分鍵和值。因此,您需要在自訂編碼器中實現邏輯來明確處理鍵到值的轉換。

<code class="python">class NestedSetEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, set):
            return list(obj)
        if isinstance(obj, dict):
            return {key: NestedSetEncoder().encode(value) for key, value in obj.items()}
        return json.JSONEncoder.default(self, obj)</code>
登入後複製
巢狀物件範例:

要處理巢狀對象,您可以遞歸地對它們的值呼叫序列化過程。例如,要處理巢狀集合,您可以這樣做:透過擴充JSONEncoder 並覆寫處理特定資料類型的預設方法,您可以自訂JSON 序列化過程以適應各種複雜和非-標準類型。

以上是如何在 Python JSON 序列化中處理非 JSON 可序列化型別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!