使用Python在json模式中完全扩展$ ref引用

时间:2017-11-01 11:46:20

标签: python json validation schema jsonschema

我们有一个相当大而复杂的json架构,其中很多都包含$ ref引用。理想情况下使用Python和jsonschema我想采用这些模式并完全扩展引用(递归)以获得完整的模式。

以dict形式输出很好(jsonschema用来表示模式的标准数据结构)。

2 个答案:

答案 0 :(得分:3)

如果您查看json documentation 您会发现不建议使用循环$ ref但不禁止。 因此,在这种情况下,无法完全展开所有$ref

但如果你确定$ref中没有循环,我会建议你使用this repo它在这种情况下帮助了我。代码非常简单,因此您可以自行更改。

答案 1 :(得分:0)

我已经测试过,也可以推荐以下模块:

https://github.com/gazpachoking/jsonref

位于PyPI上。 documentation很好,最近才进行维护(2018年10月),其语法使得它可以代替标准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]}