【问题标题】:How to serialize Python dict to JSON如何将 Python dict 序列化为 JSON
【发布时间】:2016-08-21 04:12:19
【问题描述】:

所以我有一些我想序列化为 JSON 的 python dict

{'someproperty': 0, 'anotherproperty': 'value', 'propertyobject': SomeObject(someproperty=0, anotherproperty=0)}

但是json.dumps 抛出一个TypeError: SomeObject(someproperty=0, anotherproperty=0) is not JSON serializable

那么我怎样才能正确序列化我的python dict?

【问题讨论】:

  • 你不能有对象,即使 SomeObject 应该是一个 json 对象。像 {'someproperty': 0, 'anotherproperty': 'value', 'SomeJson':{'someproperty':0, 'anotherproperty':0}}

标签: python json python-2.7 dictionary typeerror


【解决方案1】:

问题是,python 不知道如何表示SomeObject

您可以像这样创建后备:

import json

def dumper(obj):
    try:
        return obj.toJSON()
    except:
        return obj.__dict__

obj = {'someproperty': 0, 'anotherproperty': 'value', 'propertyobject': SomeObject(someproperty=0, anotherproperty=0)}

print json.dumps(obj, default=dumper, indent=2)

【讨论】:

  • 有没有办法可以返回按字典键排序的 json 数据?
【解决方案2】:

Python 只能序列化内置数据类型的对象。 在您的情况下,“SomeObject”是 Python 无法序列化的用户定义类型。如果您尝试序列化任何不是 json 可序列化的数据类型,则会收到 TypeError "TypeError: is not JSON serializable"。所以应该有一个中间步骤,将这些非内置数据类型转换成 Python 内置的可序列化数据结构(列表、字典、数字和字符串)。

所以让我们将您的 SomeObject 转换为 python 字典,因为字典是表示您的对象的最简单方法(因为它具有键/值对)。您只需将所有 SomeObject 实例属性复制到新字典即可! myDict = self.__dict__.copy() 这个 myDict 现在可以是你的“propertyobject”的值了。

在这一步之后,当您将字典转换为字符串(JSON 格式,但它可以是 YAML、XML、CSV...)时 - 对我们来说它将是 jsonObj = JSON.dumps(finalDict)强>

最后一步是将 jsonObj 字符串写入磁盘上的文件!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-01
    • 2020-07-19
    • 1970-01-01
    • 2011-08-19
    • 2012-06-01
    • 2017-09-03
    • 2013-11-23
    • 1970-01-01
    相关资源
    最近更新 更多