我想创建一个架构,使其具有属性has_reference
时,字段reference
存在(如果该字段不存在,则隐式为false)。反之亦然。该架构还有其他字段a
和b
。
这是一个有效的实例:
{
"a": 1, "b": 2
}
{
"a": 1, "b": 2
"has_refernce": true, "reference": "bla"
}
但这无效:
{
"a": 1, "b": 2
"has_refernce": true
}
{
"a": 1, "b": 2
"refernce": "bla"
}
这可能吗?
编辑:我了解正确的设计将是删除“ use_reference”并使用空的“ reference”来指示是否存在引用,但是我可以更改设计
答案 0 :(得分:3)
如果您正在使用最新(DRAFT-07)版本的架构,则可以利用以下技巧来实现-
- hosts: localhost
become: yes
tasks:
- name: get version
shell: curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt
register: version
- name: install kubectl
get_url:
url: "https://storage.googleapis.com/kubernetes-release/release/{{ version.stdout }}/bin/linux/amd64/kubectl"
dest: /usr/local/bin/
mode: '0440'
您还可以在架构中使用条件-
"dependencies": {
"has_refernce": [
"reference"
],
"reference": [
"has_refernce"
]
}
答案 1 :(得分:1)
如果您这样重写,添加“ required”关键字会更容易:
{
"a": 1, "b": 2,
"ref" : {
"has_refernce": true,
"reference": "bla"
}
}
您可以尝试使用“ required”关键字,但只能用于“ ref”内部的元素。您的架构如下所示:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"a": {
"type": "integer"
},
"b": {
"type": "integer"
},
"ref": {
"type": "object",
"properties": {
"has_refernce": {
"type": "boolean"
},
"reference": {
"type": "string"
}
},
"required" : [ "has_refernce", "reference" ]
}
},
"required": [
"a",
"b"
]
}
因此仅需要a和b,但是一旦定义了“ ref”,则将同时需要“具有”引用”和“引用”。
希望获得帮助。