yapic.json 1.9.1

Creator: bradpython12

Last updated:

Add to Cart

Description:

yapic.json 1.9.1

yapic.json is an extreamly fast json encoder / decoder package for python.
Encoding and decoding output fully compatible with python.json package.

Features

Extreamly fast (see benchmark results in ‘/benchmark’ directory)
Fully compatible output with Python json package
Builtin object serialization method __json__ (see below)
Strict JSON (RFC 4627) expected: Infinity, NaN (JavaScript compatible infinity and not a number symbols)
UTF-8 encoding & decoding support
Accurate float encoding & decoding
date / datetime / time encondig & decoding support (can encode subclasses)
uuid.UUID encoding support
ItemsView encoding support
from collections.abc import ItemsView

class MyDictGenerator(ItemsView):
def __iter__(self):
yield ("some_key", "some_value")
yield ("meaning_of_life", 42)

json.dumps(MyDictGenerator()) == '{"some_key":"some_value","meaning_of_life":42}'




Requirements

Only works with Python 3.5 or greater
c++ 11 comaptible compiler. (only if u want to build from source)
Wheels provided for windows x86/x64 and linux x86/x64 and osx x64

On Windows you maybe need to install Microsoft Visual C++ Redistributable


Windows



Usage
Very similar that python.json, let’s see some example
Json data to python
from yapic import json

>>> json.loads('"Hello World"')
"Hello World"
Python object to json data
from yapic import json

>>> json.dumps("Hello World")
'"Hello World"'

class Point:
def __json__(self):
return {"x":1, "y":2}

>>> json.dumps(Point())
'{"x":1,"y":2}'


Functions

loads (s: bytes, str, *, object_hook: Callable[[dict], Any]]=None, parse_float: Callable[[str], Any]]=None, parse_date: bool=True)
object_hook example:
>>> from yapic import json
>>> def hook(dict_):
... if "__complex__" in dict_:
... return complex(dict_["real"], dict_["imag"])
...
>>> json.loads('{"__complex__":true, "real":1, "imag":2}',
>>> object_hook=hook)
(1+2j)
parse_float example:
>>> from yapic import json
>>> from decimal import Decimal
>>> json.loads("1.2", parse_float=Decimal)
Decimal('1.2')

dumps (obj: Any, *, default: Callable[[Any], JSONT]=None, tojson: str="__json__", ensure_ascii: bool=True, encode_datetime: bool=True) -> str
default example:
>>> from yapic import json
>>> def default_func(o):
... if isinstance(o, complex):
... return {"__complex__": True, "real": 1, "imag": 2}
...
>>> json.dumps(1 + 2j, default=default_func)
'{"__complex__":true,"real":1,"imag":2}'
tojson example:
>>> from yapic import json
>>> class Point(object):
... def __init__(self, x, y):
... self.x = x
... self.y = y
... def __json__(self):
... return {"x": self.x, "y": self.y}
...
>>> json.dumps(Point(10, 20))
'{"x":10,"y":20}'

dumpb (obj: Any, *, default: Callable[[Any], JSONT]=None, tojson: str="__json__", ensure_ascii: bool=True, encode_datetime: bool=True) -> bytes
Same as dumps, but this function is return bytes insted of str




Exceptions
import json as py_json

class JsonError(ValueError):
"""Base exception for all json errors"""

class JsonEncodeError(JsonError):
"""Exception for encoding errors"""

class JsonDecodeError(JsonError, py_json.JSONDecodeError):
"""Exception for decoding errors

Can match python builtin ``json.JSONDecodeError``.
"""

# alias for easier switch from std json lib
JSONDecodeError = JsonDecodeError


Json to Python translations


Json
Python



“string”
str

42
int

4.2, 4e2
float (unless you specify parse_float)

Infinity
float(“inf”)

NaN
float(“NaN”)

true
True

false
False

null
None

2000-01-01 12:34:56
datetime without timezone

2000-01-01 12:34:56Z
datetime with utc timezone

2000-01-01 12:34:56+0300
datetime with custom timezone

2000-01-01
date

10:12:34
time without timezone

10:12:34+0300
time with custom timezone

{…}
dict (unless you specify object_hook)

[…]
list





Python to Json translations


Python
Json



str
“…”

int(42)
42

float(4.2), Decimal(4.2)
4.2

float(“inf”), Decimal(“inf”)
Infinity

float(“nan”), Decimal(“nan”)
NaN

True
true

False
false

None
null

datetime
“2000-01-01 12:34:56”, “2000-01-01T12:34:56+0300”

date
“2000-01-01”

time
“12:34:56”, “12:34:56+0300”

UUID
“aba04c17-6ea3-48c1-8dcd-74f0a9b79bee”

Enum
encoding Enum.value attribute

dict, ItemsView, dataclass
{…}

list, tuple, set, iterable
[…]

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Files:

Customer Reviews

There are no reviews.