如何在 JSON 模式中的字段上切换大小写?
How to switch-case on fields within JSON Schema?
我正在使用 Python 的 jsonschema
来验证 JSON 记录。这是一个示例架构。这里只有两个案例,但想象一个类似的场景,它有一百个这样的案例。
{
"$schema": "http://json-schema.org/draft-07/schema#",
"oneOf": [
{
"type": "object",
"required": ["a", "b", "c"],
"properties": {
"a": {"type": "integer", "enum": [0]},
"b": {"type": "integer", "enum": [0, 2, 4, 6, 8]},
"c": {"type": "string", "enum": ["always the same"]}
}
},
{
"type": "object",
"required": ["a", "b", "c"],
"properties": {
"a": {"type": "integer", "enum": [1]},
"b": {"type": "integer", "enum": [1, 3, 5, 7, 9]},
"c": {"type": "string", "enum": ["always the same"]}
}
}
]
}
关键问题是 "c"
字段重复。我希望能够在 "a"
上切换大小写,验证相应的 "b"
,但 "c"
始终保持不变。我不想拼出 "c"
一百次。这可能吗?
谢谢!
是的,可以做到。事实上,最好只放入 anyOf
/oneOf
发生变化的部分。
{
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"c": { "const": "always the same" }
},
"required": ["a", "b", "c"],
"anyOf": [
{
"properties": {
"a": { "const": 0 },
"b": { "enum": [0, 2, 4, 6, 8] }
}
},
{
"properties": {
"a": { "const": 1 },
"b": { "enum": [1, 3, 5, 7, 9] }
}
}
]
}
我正在使用 Python 的 jsonschema
来验证 JSON 记录。这是一个示例架构。这里只有两个案例,但想象一个类似的场景,它有一百个这样的案例。
{
"$schema": "http://json-schema.org/draft-07/schema#",
"oneOf": [
{
"type": "object",
"required": ["a", "b", "c"],
"properties": {
"a": {"type": "integer", "enum": [0]},
"b": {"type": "integer", "enum": [0, 2, 4, 6, 8]},
"c": {"type": "string", "enum": ["always the same"]}
}
},
{
"type": "object",
"required": ["a", "b", "c"],
"properties": {
"a": {"type": "integer", "enum": [1]},
"b": {"type": "integer", "enum": [1, 3, 5, 7, 9]},
"c": {"type": "string", "enum": ["always the same"]}
}
}
]
}
关键问题是 "c"
字段重复。我希望能够在 "a"
上切换大小写,验证相应的 "b"
,但 "c"
始终保持不变。我不想拼出 "c"
一百次。这可能吗?
谢谢!
是的,可以做到。事实上,最好只放入 anyOf
/oneOf
发生变化的部分。
{
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"c": { "const": "always the same" }
},
"required": ["a", "b", "c"],
"anyOf": [
{
"properties": {
"a": { "const": 0 },
"b": { "enum": [0, 2, 4, 6, 8] }
}
},
{
"properties": {
"a": { "const": 1 },
"b": { "enum": [1, 3, 5, 7, 9] }
}
}
]
}