跳转到主要内容

Python的JSON引用实现

项目描述

https://travis-ci.org/gazpachoking/jsonref.png?branch=master https://coveralls.io/repos/gazpachoking/jsonref/badge.png?branch=master

jsonref 是一个用于Python(支持2.6+包括Python 3)自动解引用JSON引用对象的库(支持JSON Reference)。

此库允许您使用具有JSON引用对象的数据结构,就像引用已被替换为引用的数据一样。

>>> 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]}

特性

  • 引用是按需评估的。直到使用之前,不会进行任何解引用。

  • 支持递归引用,并创建递归Python数据结构。

引用对象实际上被替换为几乎完全透明的延迟查找代理对象。

>>> 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]}
Bitdeli badge

项目详情


下载文件

下载适合您的平台的文件。如果您不确定要选择哪个,请了解更多关于 安装软件包 的信息。

源分布

jsonref-ap-0.3-dev.tar.gz (12.4 kB 查看哈希值)

上传时间:

由以下支持