在 json 中用枚举选项表示布尔值以生成 json 带有 genson 的模式
Representing boolean with enum options in json to generate json schema with genson
我正在尝试使用 genson python 库构建一个 json 模式,然后在前端使用该模式生成动态表单。在这种情况下,我希望前端基于模式值创建一个单选按钮。但我对布尔类型有疑问。例如,这是我的 json 数据的样子
configuration = {
"displayType": {"Opaque":True, "Border":False}
} #Out of the two options here, only one of them can be true.
这就是我从中创建模式的方式。
builder = SchemaBuilder(schema_uri="https://json-schema.org/draft/2020-12/schema")
builder.add_object(configuration)
schema = builder.to_schema()
生成的架构如下所示,
{
'type': 'object',
'properties': {
'Opaque': {
'type': 'boolean'
},
'Border': {
'type': 'boolean'
}
},
'required': ['Border', 'Opaque']
}
如上必填字段所示,我需要了解彼此之间相互关系的信息,但我只有一个必填字段。谁能帮我相应地修改 json 数据?
您可以将此添加到您的架构中:
'not': {
'properties': {
'Opaque': { 'const': true },
'Border': { 'const': true }
}
}
在伪代码中,即:“如果 Opaque 为真且 Border 为真,则验证为假。”
或者,因为您需要同时设置 Opaque 和 Border,并且它们只能为 true 或 false,您可以使用 if/then/else,如:“如果 Opaque 为 true,则 Border 为 false,否则边框为真":
'if': {
'properties': {
'Opaque': { const: true }
}
},
'then': {
'properties': {
'Border': { const: false }
}
},
'else': {
'properties': {
'Border': { const: true }
}
}
您可以在此处阅读有关向架构添加条件的更多信息:https://json-schema.org/understanding-json-schema/reference/conditionals.html
我正在尝试使用 genson python 库构建一个 json 模式,然后在前端使用该模式生成动态表单。在这种情况下,我希望前端基于模式值创建一个单选按钮。但我对布尔类型有疑问。例如,这是我的 json 数据的样子
configuration = {
"displayType": {"Opaque":True, "Border":False}
} #Out of the two options here, only one of them can be true.
这就是我从中创建模式的方式。
builder = SchemaBuilder(schema_uri="https://json-schema.org/draft/2020-12/schema")
builder.add_object(configuration)
schema = builder.to_schema()
生成的架构如下所示,
{
'type': 'object',
'properties': {
'Opaque': {
'type': 'boolean'
},
'Border': {
'type': 'boolean'
}
},
'required': ['Border', 'Opaque']
}
如上必填字段所示,我需要了解彼此之间相互关系的信息,但我只有一个必填字段。谁能帮我相应地修改 json 数据?
您可以将此添加到您的架构中:
'not': {
'properties': {
'Opaque': { 'const': true },
'Border': { 'const': true }
}
}
在伪代码中,即:“如果 Opaque 为真且 Border 为真,则验证为假。”
或者,因为您需要同时设置 Opaque 和 Border,并且它们只能为 true 或 false,您可以使用 if/then/else,如:“如果 Opaque 为 true,则 Border 为 false,否则边框为真":
'if': {
'properties': {
'Opaque': { const: true }
}
},
'then': {
'properties': {
'Border': { const: false }
}
},
'else': {
'properties': {
'Border': { const: true }
}
}
您可以在此处阅读有关向架构添加条件的更多信息:https://json-schema.org/understanding-json-schema/reference/conditionals.html