JSON encoder and decoder package in Python


JSON stands for JavaScript Object Notation. It is a lightweight data interchange format. It is similar to pickle. However, pickle serialization is Python specific whereas JSON format is implemented by many languages. The json module in Python’s standard library implements object serialization functionality that is similar to pickle and marshal modules.

Just as in pickle module, the json module also provides dumps() and loads() function for serialization of Python object into JSON encoded string, and dump() and load() functions write and read serialized Python objects to/from file.

dumps()

This function converts the object into JSON format.

loads()

This function converts a JSON string back to Python object.

Following example demomstrates basic usage of these functions.

>>> import json
>>> data=['Rakesh',{'marks':(50,60,70)}]
>>> s=json.dumps(data)
>>> s
'["Rakesh", {"marks": [50, 60, 70]}]'
>>> json.loads(s)
['Rakesh', {'marks': [50, 60, 70]}]

Th dumps() function can take optional sort_keys argument. By default it is False. If set to True, the dictionary keys appear in sorted order in the JSON string.

>>> data={"marks":50, "age":20, "rank":5}
>>> s=json.dumps(data, sort_keys=True)
>>> s
'{"age": 20, "marks": 50, "rank": 5}'
>>> json.loads(s)
{'age': 20, 'marks': 50, 'rank': 5}

The dumps() function has another optional parameter called indent which takes a number as value. It decides length of each segment of formatted representation of json string, similar to pprint output.

>>> data = ['Rakesh',{'marks':(50,60,70)}]
>>> s = json.dumps(data, indent=2)
>>> print (s)
[
   "Rakesh",{
      "marks": [
         50,
         60,
         70
      ]
   }
]

The json module also has object oriented API corresponding to above functions. There are two classes defined in the module – JSONEncoder and JSONDecoder.

JSONEncoder class

Object of this class is encoder for Python data structures. Each Python data type is converted in corresponding JSON type as shown in following table.

PythonJSON
dictobject
list, tuplearray
strstring
int, float, int- & float-derived Enumsnumber
TrueTrue
Falsefalse
Nonenull

The JSONEncoder class is instantiated by JSONEncoder() constructor. Following important methods are defined in encoder class

  • encode() − serializes Python object into JSON format

  • iterencode() − Encodes the object and returns an iterator yielding encoded form of each item in the object.

  • indent − Determines indent level of encoded string

  • sort_keys − is either true or false to make keys appear in sorted order or not.

  • Check_circular − if True, check for circular reference in container type object

Following example encodes Python list object.

>>> e=json.JSONEncoder()
>>> e.encode(data)
'["Rakesh", {"marks": [50, 60, 70]}]'

Using iterencode() method, each part of the encoded string is displayed as below

>>> for obj in e.iterencode(data):
print (obj)
[
   "Rakesh"
   {
      "marks"
      :
      [
         50
         , 60
         , 70
      ]
   }
]

JSONDEcoder class

Object of this class helps in decoded in json string back to Python data truture. Main method in this class is decode(). Following example code retrieves Python list object from encoded string in earlier step.

>>> d=json.JSONDecoder()
>>> d.decode(s)
['Rakesh', {'marks': [50, 60, 70]}]

JSON with files/streams

The json module defines load() and dump() functions to write JSON data to a file like object – which may be a disk file or a byte stream and read data back from them.

dump()

This function encodes Python object data in JSON format and writes it to a file. The file must be having write permission.

>>> data=['Rakesh', {'marks': (50, 60, 70)}]
>>> fp=open('json.txt','w')
>>> json.dump(data,fp)
>>> fp.close()

This code will create ‘json.txt’ in current directory. It shows the contents as follows

["Rakesh", {"marks": [50, 60, 70]}]

load()

This function loads JSON data from the file and constructs Python object from it. The file must be opened with read permission.

>>> fp=open('json.txt','r')
>>> ret=json.load(fp)
>>> ret
['Rakesh', {'marks': [50, 60, 70]}]
>>> fp.close()

This article covers the important functions in json module.

Updated on: 26-Jun-2020

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements