我有一个用例,其中我需要定义一个json配置来确定给定维度集的键。配置看起来像这样:
{
"foo": {
"bar": {
"a": "abc",
},
"car": {
"a": "xyz",
},
"dar": {
"a": "abc"
}
}
如何在JSON开头指定“ abc”并重新使用它?上面的例子是一个小的配置。我可能最终会拥有一个较大的配置文件。如果将来有更新,这将有助于使配置保持一致。 JSON是否有可能?我应该探索其他选择吗?
请澄清一下,我的问题是关于避免json配置(而不是架构)中的冗余。
答案 0 :(得分:0)
definitions
关键字是为此用例设计的。
这是链接的规范文档中的一个示例:
{
"type": "array",
"items": { "$ref": "#/definitions/positiveInteger" },
"definitions": {
"positiveInteger": {
"type": "integer",
"exclusiveMinimum": 0
}
}
}
在此示例中,如果已经为items
的值定义了子模式,则现在引用definitions/positiveInteger
中定义的架构。
https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-9
注意:您只能在没有子模式的地方使用引用。您不能引用数据,例如枚举的值。
进一步阅读:http://json-schema.org/understanding-json-schema/structuring.html
答案 1 :(得分:0)
JSON本身不支持JSON模式引用。
您可以使用jsonnet来引用或包含其他文件,但我自己并未使用过。
答案 2 :(得分:0)
由于JSON本身不支持这种抽象,因此您需要的是一种通过某种方式生成 JSON文件的方法。让我建议Dhall:
您的模板(存储在tmp.dhall
中)看起来像
let abc_val = "abc"
in {
foo = {
bar = {a = abc},
car = {a = "xyz"},
dar = {a = abc}
}
}
然后,您将使用dhall-to-json
生成JSON文件(jq
仅用于漂亮地打印结果)。
$ dhall-to-json < tmp.dhall | jq .
{
"foo": {
"dar": {
"a": "abc"
},
"car": {
"a": "xyz"
},
"bar": {
"a": "abc"
}
}
}