首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将类实例序列化为JSON

将类实例序列化为JSON
EN

Stack Overflow用户
提问于 2012-04-21 03:00:22
回答 11查看 372.4K关注 0票数 228

我正在尝试创建一个类实例的JSON字符串表示,但遇到了困难。假设这个类是这样构建的:

代码语言:javascript
复制
class testclass:
    value1 = "a"
    value2 = "b"

对json.dumps的调用如下所示:

代码语言:javascript
复制
t = testclass()
json.dumps(t)

它失败了,并告诉我testclass不是JSON可序列化的。

代码语言:javascript
复制
TypeError: <__main__.testclass object at 0x000000000227A400> is not JSON serializable

我也尝试过使用pickle模块:

代码语言:javascript
复制
t = testclass()
print(pickle.dumps(t, pickle.HIGHEST_PROTOCOL))

它给出了类实例信息,但不是类实例的序列化内容。

代码语言:javascript
复制
b'\x80\x03c__main__\ntestclass\nq\x00)\x81q\x01}q\x02b.'

我做错了什么?

EN

回答 11

Stack Overflow用户

发布于 2017-06-27 18:21:38

您可以在json.dumps()函数中指定default命名参数:

代码语言:javascript
复制
json.dumps(obj, default=lambda x: x.__dict__)

解释:

形成文档(2.73.6):

代码语言:javascript
复制
``default(obj)`` is a function that should return a serializable version
of obj or raise TypeError. The default simply raises TypeError.

(适用于Python 2.7和Python 3.x)

注意:在这种情况下,您需要的是instance变量,而不是class变量,正如问题中的示例所做的那样。(我假设提问者的意思是class instance是一个类的对象)

我首先从@phihag's answer here了解到这一点。我发现这是做这项工作最简单、最干净的方法。

票数 74
EN

Stack Overflow用户

发布于 2017-03-06 01:57:42

使用jsonpickle

代码语言:javascript
复制
import jsonpickle

object = YourClass()
json_object = jsonpickle.encode(object)
票数 27
EN

Stack Overflow用户

发布于 2013-07-10 22:36:03

我就是这么做的

代码语言:javascript
复制
data=json.dumps(myobject.__dict__)

这并不是完整的答案,如果你有一些复杂的对象类,你肯定不会得到所有的东西。但是,我将它用于我的一些简单对象。

它工作得很好的一个类是"options“类,它是从OptionParser模块获得的。这里是它和JSON请求本身。

代码语言:javascript
复制
  def executeJson(self, url, options):
        data=json.dumps(options.__dict__)
        if options.verbose:
            print data
        headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
        return requests.post(url, data, headers=headers)
票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10252010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档