How to serialize Python dict to JSON

24,039

Solution 1

The problem is, python doesn't know how to represent SomeObject

You can create a fallback like so:

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)

Solution 2

Python can serialize only the objects that is a built in data type. In your case, "SomeObject" is a User defined type that Python cannot serialize. If you try to serialize any data type which is not json serializable, you get a TypeError "TypeError: is not JSON serializable". So there should be an intermediate step that converts these non built in data types into Python built in serializable data structure (list, dict, number and string).

So let us convert your SomeObject into a python dictionary, since dictionary is the easiest way to represent your Object(as it has key/value pairs). You could just copy all your SomeObject instance attributes to a new dictionary and you are set! myDict = self.__dict__.copy() This myDict can now be the value of your "propertyobject".

After this step is when you convert dictionary to a string (JSON format, but it can be YAML, XML, CSV...) - for us it will be jsonObj = JSON.dumps(finalDict)

Last step is to write jsonObj string to a file on disk!

Share:
24,039
johnjullies
Author by

johnjullies

Lorem ipsum dolor sit amet, te mazim laoreet mediocrem quo, ea mea eius erant quodsi. Et viderer ceteros quo, sit civibus theophrastus ne, mea hinc dolorem ad. Duo eu nonumes complectitur. Ut etiam eleifend postulant has.

Updated on June 28, 2020

Comments

  • johnjullies
    johnjullies almost 4 years

    So I have some python dict that I want to serialize to JSON

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

    but json.dumps throws a TypeError: SomeObject(someproperty=0, anotherproperty=0) is not JSON serializable

    So how can I serialize my python dict properly?

  • iDev
    iDev over 4 years
    Is there a way I can return json data sorted by dictionary key?
  • endive1783
    endive1783 about 2 years
    @iDev yup, use sort_keys=True in json.dump