Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Turn Python object into JSON output [duplicate]

Tags:

python

json

New to Python, trying to define a very simple class that will hold a few values, and then get it output into JSON notation.

import json

class Multiple:
    def __init__(self, basis):
            self.double = basis * 2
            self.triple = basis * 3
            self.quadruple = basis * 4


m = Multiple(100)
json.dumps(m)

I was hoping to see something like

{
  "double":"200",
  "triple":"300",
  "quadruple":"400"
}

but instead get an error: "TypeError: <main.Multiple object at 0x0149A3F0> is not JSON serializable"

like image 956
Happysmithers Avatar asked Aug 23 '17 08:08

Happysmithers


1 Answers

You can serialise the __dict__ attribute of m:

In [214]: json.dumps(m.__dict__)
Out[214]: '{"quadruple": 400, "double": 200, "triple": 300}'

You can also call vars:

In [216]: json.dumps(vars(m))
Out[216]: '{"quadruple": 400, "double": 200, "triple": 300}'

What to use and why: Use `__dict__` or `vars()`?


For more complicated classes, consider the use of jsonpickle.

jsonpickle is a Python library for serialization and deserialization of complex Python objects to and from JSON. The standard Python libraries for encoding Python into JSON, such as the stdlib’s json, simplejson, and demjson, can only handle Python primitives that have a direct JSON equivalent (e.g. dicts, lists, strings, ints, etc.). jsonpickle builds on top of these libraries and allows more complex data structures to be serialized to JSON.

Emphasis mine.

like image 177
cs95 Avatar answered Oct 14 '22 14:10

cs95