Skip to main content

A Python Package to Encode/Decode some common file formats to json

Project description

Coverage Status Code Style Tests PyPI version

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

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:

{
    "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.

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:

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

{
    "_type": "datetime",
    "value": "2022-03-11T09:47:35.280331"
}

If you don't want to register your converter to be used everywhere, simply use:

json_string = json.dumps(dt, cls=znjson.ZnEncoder.from_converters(DatetimeConverter))

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

znjson-0.2.6.tar.gz (12.5 kB view details)

Uploaded Source

Built Distribution

znjson-0.2.6-py3-none-any.whl (15.3 kB view details)

Uploaded Python 3

File details

Details for the file znjson-0.2.6.tar.gz.

File metadata

  • Download URL: znjson-0.2.6.tar.gz
  • Upload date:
  • Size: 12.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.12.7 Linux/6.5.0-1025-azure

File hashes

Hashes for znjson-0.2.6.tar.gz
Algorithm Hash digest
SHA256 b9a5360bc598018ea82972c595b953edc6cc0b3f860fbaff46034266461372ea
MD5 0ce2810ebe9da70aff7395b2967949f6
BLAKE2b-256 e2d66041b375b2e5e789bf99ff4b2f4f179f1328fe8221e209c87376461b8676

See more details on using hashes here.

File details

Details for the file znjson-0.2.6-py3-none-any.whl.

File metadata

  • Download URL: znjson-0.2.6-py3-none-any.whl
  • Upload date:
  • Size: 15.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.12.7 Linux/6.5.0-1025-azure

File hashes

Hashes for znjson-0.2.6-py3-none-any.whl
Algorithm Hash digest
SHA256 144cc842161cabf6bc97ec8908dd99b2ef37faa4ecc4083d1ad816654a5527e0
MD5 7f74050c7f4ec4b3fbf165c99d7fa197
BLAKE2b-256 35ed4874212e62e00dac96e84e68fe8465a3e50e512e8e2984c0a874298522da

See more details on using hashes here.

Supported by

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