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 details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

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

Uploaded Python 3

File details

Details for the file ComplexJSON-1.2.0.tar.gz.

File metadata

  • Download URL: ComplexJSON-1.2.0.tar.gz
  • Upload date:
  • Size: 5.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.6

File hashes

Hashes for ComplexJSON-1.2.0.tar.gz
Algorithm Hash digest
SHA256 a3ad13632d5248c9201facc4e883fdc9203a2df0774d0395e7252bbc93603c87
MD5 371d5a0072dbdfa5263aad2568f85c37
BLAKE2b-256 c0174e4f1761c233b6cf1f914fb2644fc5ef707a1f89500424b26789a2a390fd

See more details on using hashes here.

File details

Details for the file ComplexJSON-1.2.0-py3-none-any.whl.

File metadata

  • Download URL: ComplexJSON-1.2.0-py3-none-any.whl
  • Upload date:
  • Size: 7.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.6

File hashes

Hashes for ComplexJSON-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 642613ff218fedb6f1c40aa6149fa587bf25ebf33eb962cd82cf36d232a6aed4
MD5 faf10bfa5b673a2500cc984a387a45ce
BLAKE2b-256 2c2d57668cea2e2b278bdddeded702ea2e42e6821c8199712d03999a92771cd1

See more details on using hashes here.

Supported by

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