Oven logo

Oven

jsonref1.1.0

Published

jsonref is a library for automatic dereferencing of JSON Reference objects for Python.

pip install jsonref

Package Downloads

Weekly DownloadsMonthly Downloads

Requires Python

>=3.7

Dependencies

    jsonref

    image image image image

    jsonref is a library for automatic dereferencing of JSON Reference objects for Python (supporting Python 3.7+).

    This library lets you use a data structure with JSON reference objects, as if the references had been replaced with the referent data.

    >>> from pprint import pprint
    >>> import jsonref
    
    >>> # An example json document
    >>> json_str = """{"real": [1, 2, 3, 4], "ref": {"$ref": "#/real"}}"""
    >>> data = jsonref.loads(json_str)
    >>> pprint(data)  # Reference is not evaluated until here
    {'real': [1, 2, 3, 4], 'ref': [1, 2, 3, 4]}
    

    Features

    • References are evaluated lazily. Nothing is dereferenced until it is used.
    • Recursive references are supported, and create recursive python data structures.

    References objects are actually replaced by lazy lookup proxy objects which are almost completely transparent.

    >>> data = jsonref.loads('{"real": [1, 2, 3, 4], "ref": {"$ref": "#/real"}}')
    >>> # You can tell it is a proxy by using the type function
    >>> type(data["real"]), type(data["ref"])
    (<class 'list'>, <class 'jsonref.JsonRef'>)
    >>> # You have direct access to the referent data with the __subject__
    >>> # attribute
    >>> type(data["ref"].__subject__)
    <class 'list'>
    >>> # If you need to get at the reference object
    >>> data["ref"].__reference__
    {'$ref': '#/real'}
    >>> # Other than that you can use the proxy just like the underlying object
    >>> ref = data["ref"]
    >>> isinstance(ref, list)
    True
    >>> data["real"] == ref
    True
    >>> ref.append(5)
    >>> del ref[0]
    >>> # Actions on the reference affect the real data (if it is mutable)
    >>> pprint(data)
    {'real': [2, 3, 4, 5], 'ref': [2, 3, 4, 5]}