Skip to main content

This is the simplest module for serialize and deserialize python complex objects

Project description

ComplexJSON Library

What is this?

The module allows you serialize your python complex objects to json and deserialize it.

How to install

To install, you can use the command:

pip install ComplexJSON

Or Download the repository from GitHub.

Quick Guide

Just use it like python builtin json module

import ComplexJSON
...
json_obj = ComplexJSON.dumps(obj)
...
new_obj = ComplexJSON.loads(json_obj)

Warning

If you use this code:

import ComplexJSON

...
a = [1, 2, 3]
b = [a, a]
c = ComplexJSON.dumps(b)
b = ComplexJSON.loads(c)

you will get multiple objects instead of 1 object with multiple links:

b[0].pop()
print(b)
>>> [[1, 2], [1, 2, 3]]

Although you might expect:

>>> [[1, 2], [1, 2]]

Using

There are variants of usage:

import ComplexJSON
...
json_obj = ComplexJSON.dumps(obj)
new_obj = ComplexJSON.loads(json_obj)
...
# or
with open("test.json", "wt", encoding="Utf-8") as f:
    ComplexJSON.dump(obj, f)
...
with open("test.json", "rt", encoding="Utf-8") as f:
    new_obj = ComplexJSON.load(json_obj, f)
# or
import json
json_obj = json.dumps(obj, cls=ComplexJSON.ComplexJSONEncoder)
new_obj = json.loads(json_obj, cls=ComplexJSON.ComplexJSONDecoder)
# or
import json
with open("test.json", "wt", encoding="Utf-8") as f:
    json.dump(obj, f, cls=ComplexJSON.ComplexJSONEncoder)
...
with open("test.json", "rt", encoding="Utf-8") as f:
    new_obj = json.load(json_obj, f, cls=ComplexJSON.ComplexJSONDecoder)

Change codewords for ComplexJSON

By default, the codewords for the module and class are "__module__" and "__class__", respectively

class A:
    def __init__(self):
        self.a = 1
        self.b = 2

Object of this class will be serialized as:

{"a": 1, "b": 2, "__module__": "__main__", "__class__": "A"}

But you can change the codewords for module and class:

from ComplexJSON import vardef

vardef.classword = "_c_"
vardef.moduleword = "_m_"

Or

import ComplexJSON

ComplexJSON.vardef.classword = "_c_"
ComplexJSON.vardef.moduleword = "_m_"

And now A class will be serialized as:

{"a": 1, "b": 2, "_m_": "__main__", "_c_": "A"}

Remove codewords from json (v1.1+)

from ComplexJSON import vardef

vardef.classword = None  # remove classword from json
vardef.moduleword = None  # remove moduleword from json

If you remove both, object will be decoded as python dict. If you remove moduleword, you need to provide class in classStorage argument in load, loads or ComplexJSONDecoder

import ComplexJSON as json
json.vardef.moduleword = None
class A:
    b = 1
...
classStorage = [A]
# or
classStorage = {"A": A}
...
json.loads(obj, classStorage=classStorage)
# or
decoder = json.ComplexJSONDecoder(classStorage=classStorage)
...
decoder.decode(obj)
# or 
json.loads(obj, object_hook=decoder.object_hook)

Local codewords (v1.1+)

import ComplexJSON as json
...
_json = json.dumps(obj, localClassWord="Type", localModuleWord="Module")
new_obj = json.loads(_json, localClassWord="Type", localModuleWord="Module")

Type Association (v1.2+)

import ComplexJSON


class A:
    def __init__(self):
        self.a = 1
        self.b = 2


rs = {1: A()}
json_obj = ComplexJSON.dumps(rs, useTypeAssociation=True)
print(json_obj)
#>>> {"types": {".": {"useTA": true}, "0": {"__module__": "__main__", "__class__": "A"}}, "obj": {"1": {"a": 1, "b": 2, "__cid__": "0"}}}
print(ComplexJSON.loads(json_obj))
#>>> {'1': <__main__.A object at 0x00000154D6013490>}

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

ComplexJSON-1.2.0.tar.gz (5.6 kB view hashes)

Uploaded Source

Built Distribution

ComplexJSON-1.2.0-py3-none-any.whl (7.3 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page