"""
Usage:
json-schema-expand-refs.py <jsonfile>
Arguments:
jsonfile JSON schema file to have refs expanded
Options:
-h --help Show this screen.
--version Show version.
"""
from docopt import docopt
from jsonref import replace_refs
from pathlib import Path
import json
def load_json(file):
with open(file, "r") as f:
data = json.load(f)
return data
if __name__ == "__main__":
args = docopt(__doc__, version="0.1.0")
jsonfile = args["<jsonfile>"]
# replace_refs returns a copy of the document with refs replaced by JsonRef
# objects. It will resolve refences to other JSON schema files
doc = replace_refs(
load_json(jsonfile),
merge_props=True,
base_uri=Path(jsonfile).absolute().as_uri(),
)
print(json.dumps(doc, indent=2))
3条答案
按热度按时间gc0ot86w1#
如果你查看JSON文档。
你会发现循环$ref不被推荐,但也不被禁止。因此,在这种情况下,不可能 * 完全展开 * 所有
$ref
但是如果你确定你的
$ref
中没有循环,我建议你使用this repo,它在这种情况下帮助了我。代码非常简单,所以你可以自己修改它。eivnm1vs2#
我已经测试过了,也可以推荐以下模块:
https://github.com/gazpachoking/jsonref
在PyPI上。documentation很好,最近才得到维护(2018年10月),语法是这样的,它是标准json模块的直接替代品:
从主页:
字符串
fiei3ece3#
这里有一个解决方案,它能够扩展当前文档中的引用,即使是对外部JSON模式文件的引用,这些文件本身也可能引用其他JSON模式文件。
使用
json.dumps()
而不是print可以使JsonRef
对象在输出时完全展开。字符串