我正在为一个Web应用程序创建一个JSON模式。该模式包含一些compute_parameters
,这些compute_parameters
将由用户指定,例如将include_direct_transport
设置为true或false,并且还包含来自数据库的输入数据,为简单起见,我们称之为dataset1
和dataset2
。现在我还有dataset3
和dataset4
,我也想将它们作为输入数据包含到我的应用程序中,但只有当include_direct_transport
设置为true时。做这件事的最佳方法是什么?我想避免冗余,最好是在一个文件中定义所有内容,但如何处理这里的情况?有没有一种方法可以在json中定义:如果include_direct_transport
== True,那么也包括dataset3
和dataset4
并验证它们?下面是我的模式的一个小例子
{
"type": "object",
"properties": {
"metadata": {
"type": "object",
"properties": {
"run_id": {"type": "string", "format": "uuid"},
...
},
"required": ["run_id"...]
},
"compute_parameters": {
"type": "object",
"properties": {
"include_direct_transport": {"type": "boolean"}
...
},
"required": ["include_direct_transport" ...]
},
"input_data": {
"type": "object",
"properties": {
"dataset1": {
"type": "array"
...}
"dataset2": {
"type": "array"
...}
这就是我现在处理它的方式,但是因为我以前从来没有定义过json模式,所以我不确定什么是最好的方法。我想我正在寻找一些一般性的建议和最佳做法。先谢了
"dependencies": {
"compute_parameters": {
"properties": {
"include_direct_transport": {
"enum": [true]
}
},
"required": ["dataset3", "dataset4"]
}
}
1条答案
按热度按时间nxagd54h1#
在这种情况下,
dependencies
关键字并不是您想要的。为了针对属性的 value(而不是属性的 presence)定义条件,您需要if
/then
关键字。if
和then
是普通模式。如果if
模式通过了示例验证,那么then
模式也必须通过验证。因此,if
定义了一个模式,其中/compute_parameters/include_direct_transport
的值是true
,而then
Assert/input_data/dataset3
和/input_data/dataset4
存在。解决方案有点冗长,但在我看来这是最好的方法。您可以在www.example.com上找到有关这些关键字的更多信息https://json-schema.org/understanding-json-schema/reference/conditionals.html#if-then-else