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
Built Distribution
Hashes for ComplexJSON-1.2.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 642613ff218fedb6f1c40aa6149fa587bf25ebf33eb962cd82cf36d232a6aed4 |
|
MD5 | faf10bfa5b673a2500cc984a387a45ce |
|
BLAKE2b-256 | 2c2d57668cea2e2b278bdddeded702ea2e42e6821c8199712d03999a92771cd1 |