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__(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
-
s = {'__type__': 'User', 'first':'f', 'last':'l'} class_map = {'User', User} strong_json.from_json(s, class_map)
- 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 strong_json, ToJsonable
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}
obj = strong_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.0.tar.gz
(10.1 kB
view details)
Built Distribution
File details
Details for the file strong_json-1.0.0.tar.gz
.
File metadata
- Download URL: strong_json-1.0.0.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 | aabb10732e7df46fa8748376e4008dd6682d0415a96dc31690e04abd474a701c |
|
MD5 | 74679ff64ce170b02995f399282d63f8 |
|
BLAKE2b-256 | a0973f0b6b6df99a4b5137ca4984a72ae37b4cb3746ce5d61cd54ba7289e43ce |
File details
Details for the file strong_json-1.0.0-py3-none-any.whl
.
File metadata
- Download URL: strong_json-1.0.0-py3-none-any.whl
- Upload date:
- Size: 6.6 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 | 0c9793e63fdbd584343c3e550f833817484825fdb98d3a7a7c59290ae3f3b537 |
|
MD5 | 8e4ca82abf525783adab5c423d4216c7 |
|
BLAKE2b-256 | debfba2548cad1e010d90a3ce7ff8f8510f1846145c366acd3d9c9425d2e0b9a |