https://github.com/zincware/znjson
Package to Encode/Decode some common file formats to json
https://github.com/zincware/znjson
deserialization json python serialization
Last synced: 10 months ago
JSON representation
Package to Encode/Decode some common file formats to json
- Host: GitHub
- URL: https://github.com/zincware/znjson
- Owner: zincware
- License: apache-2.0
- Created: 2021-12-05T17:15:37.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2025-06-23T19:34:34.000Z (11 months ago)
- Last Synced: 2025-06-23T20:31:03.895Z (11 months ago)
- Topics: deserialization, json, python, serialization
- Language: Python
- Homepage:
- Size: 226 KB
- Stars: 4
- Watchers: 1
- Forks: 1
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://coveralls.io/github/zincware/ZnJSON?branch=main)
[](https://github.com/psf/black/)
[](https://coveralls.io/github/zincware/ZnJSON?branch=main)
[](https://badge.fury.io/py/znjson)
# ZnJSON
Package to Encode/Decode some common file formats to json
Available via ``pip install znjson``
In comparison to `pickle` this allows having readable json files combined with some
serialized data.
# Example
````python
import numpy as np
import json
import znjson
data = json.dumps(
obj={"data_np": np.arange(2), "data": [x for x in range(10)]},
cls=znjson.ZnEncoder,
indent=4
)
_ = json.loads(data, cls=znjson.ZnDecoder)
````
The resulting ``*.json`` file is partially readable and looks like this:
````json
{
"data_np": {
"_type": "np.ndarray_small",
"value": [
0,
1
]
},
"data": [
0,
1,
2,
3,
4
]
}
````
# Custom Converter
ZnJSON allows you to easily add custom converters.
Let's write a serializer for ``datetime.datetime``.
````python
from znjson import ConverterBase
from datetime import datetime
class DatetimeConverter(ConverterBase):
"""Encode/Decode datetime objects
Attributes
----------
level: int
Priority of this converter over others.
A higher level will be used first, if there
are multiple converters available
representation: str
An unique identifier for this converter.
instance:
Used to select the correct converter.
This should fulfill isinstance(other, self.instance)
or __eq__ should be overwritten.
"""
level = 100
representation = "datetime"
instance = datetime
def encode(self, obj: datetime) -> str:
"""Convert the datetime object to str / isoformat"""
return obj.isoformat()
def decode(self, value: str) -> datetime:
"""Create datetime object from str / isoformat"""
return datetime.fromisoformat(value)
````
This allows us to use this new serializer:
````python
znjson.config.register(DatetimeConverter) # we need to register the new converter first
json_string = json.dumps(dt, cls=znjson.ZnEncoder, indent=4)
json.loads(json_string, cls=znjson.ZnDecoder)
````
and will result in
````json
{
"_type": "datetime",
"value": "2022-03-11T09:47:35.280331"
}
````
If you don't want to register your converter to be used everywhere, simply use:
```python
json_string = json.dumps(dt, cls=znjson.ZnEncoder.from_converters(DatetimeConverter))
```