JSON Decoder and Encoder with type information.
Project description
StrongJson
A more faithful python json encoder/decoder.
Install
pip install strong_json
or directly from this repository
pip install git+git://github.com/piti118/strong-json.git
Features
In addition to the standard json.dumps/loads, this module offer the following additonal behavior.
-
Simple interface to allow class to dump to json.
-
class User(ToJsonable): def __init__(self, first, last): self.first = first self.last = last
-
-
Preserve type information.
User('f', 'l')
->{'__type__': 'User', 'first':'f', 'last':'l'}
-
More faithful dictionary dumps/loads
- Treat dictionary as OrderedDictionary when encode. See Python 3.6 Release Note.
{'a':'b', 'c':'d'}
->{ '__type__':'dict' '__data__':[ {'key': 'a', 'value': 'b'}, {'key': 'c', 'value': 'd'}, ] }
- Decoder will accept both traditional form(
{'a':'b','c':'d'}
) and the form above.
- Allow any hashable object as key
{User('f', 'l'): 1, User('a','b'):2}
->{ '__type__': 'dict' '__data__': [ { 'key': {'__type__': 'User', 'first': 'f', 'last':'l'}, 'value: 1 }, { 'key': {'__type__': 'User', 'first': 'a', 'last':'b'}, 'value: 2 } ] }
- Treat dictionary as OrderedDictionary when encode. See Python 3.6 Release Note.
-
Distinguish tuple from List
[1,2,3]
->[1,2,3]
(1,2,3)
->{'__type__':'tuple', '__data__':[1,2,3]}
-
Custom class decoder whitelist via class_map
-
from strong_json import StrongJson s = {'__type__': 'User', 'first':'f', 'last':'l'} class_map = {'User', User} custom_json = StrongJson(class_map=class_map) custom_json.from_json(s)
- By default, strong json pass all the argument by name to the constructor.
- You could also override
StrongJson
or implement interfaceFromJsonable
for custom decoder. - You could also use strong_json.ClassMapBuilder to save some typing.
-
-
Support for date and datetime.
datetime.date(2019,8,23)
->
{ '__type__': 'date', '__data__':{ 'year': 2019, 'month': 8, 'day': 23 } }
-
Support for Enum.
-
->class Color(Enum): RED='redd' BLUE='blueee strong_json.to_json(Color.RED)
{'__type__': 'Color' '__data__':'RED'}
-
Basic Usage
From Object to JSON
Builtin Object
from strong_json import strong_json
obj = {'a': [1,2,3], 'b':[2,3,4]}
s = strong_json.to_json(obj)
# if you want indentation you could do
s_indent = strong_json.to_json(obj, indent=2)
Custom Class
from strong_json import strong_json, ToJsonable
class User(ToJsonable):
def __init__(self, first, last):
self.first = first
self.last = last
obj = {'a': User('a', 'aa'), 'b':User('b', 'bb')}
s = strong_json.to_json(object)
From JSON to object
Builtin Object
from strong_json import strong_json
s = """{'a': 'b', 'c':'d'}"""
obj = strong_json.from_json(s)
Custom Class
from strong_json import StrongJson
class User: # it doesn't have to be ToJsonable
def __init__(self, first, last):
self.first = first
self.last = last
s = """
{
'__type__': 'User',
'first': 'hello',
'last': 'world'
}
"""
class_map = {'User': User}
custom_json = StrongJson(class_map=class_map)
obj = custom_json.to_json(s, class_map)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
strong_json-1.0.1.tar.gz
(10.1 kB
view details)
Built Distribution
File details
Details for the file strong_json-1.0.1.tar.gz
.
File metadata
- Download URL: strong_json-1.0.1.tar.gz
- Upload date:
- Size: 10.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e90261f76aca8827978a971e1eb824d73c2ee5efd5cbecffb0aedfa420468e1b |
|
MD5 | 84a9e789587a7f12d17d869d67b15070 |
|
BLAKE2b-256 | eadac9c4237c91ac683f2b23c8459cfc07f7d0f07919ec70bb39b9f0f61601a9 |
File details
Details for the file strong_json-1.0.1-py3-none-any.whl
.
File metadata
- Download URL: strong_json-1.0.1-py3-none-any.whl
- Upload date:
- Size: 6.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7b937a5c0588ede73ead9db482be83bf002008f207361e584a5acdfb794e3fd6 |
|
MD5 | c7a1e0b2957f1063a01e63047224326e |
|
BLAKE2b-256 | 0cd7caf0dfd6ffc618085e5d30597915643cc3b4cff0a8f96859f897185e2d0f |