Source code for asn1vnparser.jsonencoder

# -*- coding: utf-8 -*-

"""Defines `json.JSONEncoder` subclass
that makes parsed object (including bytes and bitarray) JSON-serializable
"""

import bitarray
import json
import sys


[docs]class JSONEncoder(json.JSONEncoder): """JSON encoder with additional support for bytes and bitarray Examples: >>> JSONEncoder().encode({"field1": 123}) '{"field1": 123}' >>> JSONEncoder().encode({"field1": b'\x12\x34'}) '{"field1": "1234"}' >>> JSONEncoder().encode({"field1": bitarray.bitarray('01010')}) '{"field1": "01010"}' >>> JSONEncoder(compact_bitarray=True).encode({"field1": bitarray.bitarray('01010')}) '{"field1": {"value": "50", "length": 5}}' >>> JSONEncoder().encode({"field1": {"Type": 567}}) '{"field1": {"Type": 567}}' """ def __init__(self, compact_bitarray=False, *args, **kwargs): super().__init__(*args, **kwargs) self._compact_bitarray = bool(compact_bitarray)
[docs] def default(self, o): if isinstance(o, (bytes, bytearray)): return o.hex() elif isinstance(o, bitarray.bitarray): if self._compact_bitarray: return {'value': o.tobytes().hex(), 'length': len(o)} else: return o.to01() else: super().default(o)