我正在尝试创建一个类实例的JSON字符串表示,但遇到了困难。假设这个类是这样构建的:
class testclass:
value1 = "a"
value2 = "b"
对json.dumps的调用如下所示:
t = testclass()
json.dumps(t)
它失败了,并告诉我testclass不是JSON可序列化的。
TypeError: <__main__.testclass object at 0x000000000227A400> is not JSON serializable
我也尝试过使用pickle模块:
t = testclass()
print(pickle.dumps(t, pickle.HIGHEST_PROTOCOL))
它给出了类实例信息,但不是类实例的序列化内容。
b'\x80\x03c__main__\ntestclass\nq\x00)\x81q\x01}q\x02b.'
我做错了什么?
发布于 2017-06-27 18:21:38
您可以在json.dumps()
函数中指定default
命名参数:
json.dumps(obj, default=lambda x: x.__dict__)
解释:
``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了解到这一点。我发现这是做这项工作最简单、最干净的方法。
发布于 2017-03-06 01:57:42
import jsonpickle
object = YourClass()
json_object = jsonpickle.encode(object)
发布于 2013-07-10 22:36:03
我就是这么做的
data=json.dumps(myobject.__dict__)
这并不是完整的答案,如果你有一些复杂的对象类,你肯定不会得到所有的东西。但是,我将它用于我的一些简单对象。
它工作得很好的一个类是"options“类,它是从OptionParser模块获得的。这里是它和JSON请求本身。
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)
https://stackoverflow.com/questions/10252010
复制相似问题