jsonref is a library for automatic dereferencing of JSON Reference objects for Python.
Project Links
Meta
Author: Chase Sterling
Requires Python: >=3.7
Classifiers
jsonref
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]}
Jan 16, 2023
1.1.0
Nov 04, 2022
1.0.1
Oct 28, 2022
1.0.0.post1
Oct 28, 2022
1.0.0
Oct 24, 2022
1.0.0b3
Oct 23, 2022
1.0.0b2
Oct 19, 2022
1.0.0b1
Oct 08, 2022
0.3.0
Oct 07, 2018
0.2
May 17, 2013
0.1
Wheel compatibility matrix
Files in release
No dependencies