Skip to main content

Easily extend JSON to encode and decode arbitrary Python objects.

Project description

extendedjson

Easily extend JSON to encode and decode arbitrary Python objects.

Getting started

You can get extendedjson from PyPI, which means it's easily installable with pip:

python -m pip install extendedjson

Example usage

Suppose you want to extend the JSON format to handle complex numbers, which corresponds to the type complex in Python.

To do that, you need to:

  1. Determine how a complex number could look like as a JSON dictionary. For example, a dictionary with keys "real" and "imag" is enough to determine what complex number we are talking about.
  2. Subclass ExtendedEncoder and implement the method encode_complex that accepts a complex number and returns a dictionary with the format you defined.
  3. Subclass ExtendedDecoder and implement a method decode_complex that accepts a dictionary with the format you described and returns an instance of a complex number.

Here is the code:

import extendedjson as xjson


class MyEncoder(xjson.ExtendedEncoder):
    def encode_complex(self, c):
        return {"real": c.real, "imag": c.imag}


class MyDecoder(xjson.ExtendedDecoder):
    def decode_complex(self, dict_):
        return complex(dict_["real"], dict_["imag"])

Then, you can use your classes with the standard module json, by specifying the cls keyword argument in the functions json.load, json.loads, json.dump, and json.dumps:

import json

c = complex(1, 2)
c_json = json.dumps(c, cls=MyEncoder)
c_ = json.loads(c_json, cls=MyDecoder)
print(c_)  # (1+2j)
print(c_ == c)  # True

Refer to this article to learn more about the internal details of extendedjson.

Changelog

Refer to the CHANGELOG.md file.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

extendedjson-0.1.1.tar.gz (3.2 kB view hashes)

Uploaded source

Built Distribution

extendedjson-0.1.1-py3-none-any.whl (3.1 kB view hashes)

Uploaded py3

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page