Source code for wheezy.core.json

""" ``json`` module.
"""

from decimal import Decimal
from json import (
    JSONEncoder as SimpleJSONEncoder,
    dumps as json_dumps,
    loads as json_loads,
)

from wheezy.core.datetime import format_iso_datetime, format_iso_time
from wheezy.core.introspection import import_name

date = import_name("datetime.date")
datetime = import_name("datetime.datetime")
time = import_name("datetime.time")


[docs]def json_encode(obj): """Encode ``obj`` as a JSON formatted unicode string. Correctly escapes forward slash to be able embed javascript code. """ return json_dumps( obj, cls=JSONEncoder, ensure_ascii=False, separators=(",", ":") ).replace("</", "<\\/")
[docs]def json_decode(s): """Decode ``s`` (containing a JSON unicode string) to a Python object. """ return json_loads(s, parse_float=Decimal)
[docs]class JSONEncoder(SimpleJSONEncoder):
[docs] def default(self, obj): if isinstance(obj, datetime): if obj == datetime.min: return "" return format_iso_datetime(obj) elif isinstance(obj, date): if obj == date.min: return "" return obj.isoformat() elif isinstance(obj, time): return format_iso_time(obj) elif isinstance(obj, Decimal): return str(obj) else: # pragma: nocover return super(JSONEncoder, self).default(obj)