I am trying to create a JSON string representation of a class instance and having difficulty. Let’s say the class is built like this:
class testclass:
value1 = "a"
value2 = "b"
A call to the json.dumps is made like this:
t = testclass()
json.dumps(t)
It is failing and telling me that the testclass is not JSON serializable.
TypeError: <__main__.testclass object at 0x000000000227A400> is not JSON serializable
I have also tried using the pickle module :
t = testclass()
print(pickle.dumps(t, pickle.HIGHEST_PROTOCOL))
And it gives class instance information but not a serialized content of the class instance.
b'\x80\x03c__main__\ntestclass\nq\x00)\x81q\x01}q\x02b.'
What am I doing wrong?
The basic problem is that the JSON encoder
json.dumps()only knows how to serialize a limited set of object types by default, all built-in types. List here: https://docs.python.org/3.3/library/json.html#encoders-and-decodersOne good solution would be to make your class inherit from
JSONEncoderand then implement theJSONEncoder.default()function, and make that function emit the correct JSON for your class.A simple solution would be to call
json.dumps()on the.__dict__member of that instance. That is a standard Pythondictand if your class is simple it will be JSON serializable.The above approach is discussed in this blog posting:
Serializing arbitrary Python objects to JSON using _dict_
And, of course, Python offers a built-in function that accesses
.__dict__for you, calledvars().So the above example can also be done as: