我在想出可以验证JSON是否包含以下任一内容的JSON模式时遇到了麻烦:
但如果存在多个则不匹配。
具体来说,我要
copyAll
fileNames
matchesFiles
和/或 doesntMatchFiles
进行验证,但我不想接受更多的验证。
这是到目前为止我得到的:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"required": [ "unrelatedA" ],
"properties": {
"unrelatedA": {
"type": "string"
},
"fileNames": {
"type": "array"
},
"copyAll": {
"type": "boolean"
},
"matchesFiles": {
"type": "array"
},
"doesntMatchFiles": {
"type": "array"
}
},
"oneOf": [
{"required": ["copyAll"], "not":{"required":["matchesFiles"]}, "not":{"required":["doesntMatchFiles"]}, "not":{"required":["fileNames"]}},
{"required": ["fileNames"], "not":{"required":["matchesFiles"]}, "not":{"required":["doesntMatchFiles"]}, "not":{"required":["copyAll"]}},
{"anyOf": [
{"required": ["matchesFiles"], "not":{"required":["copyAll"]}, "not":{"required":["fileNames"]}},
{"required": ["doesntMatchFiles"], "not":{"required":["copyAll"]}, "not":{"required":["fileNames"]}}]}
]
} ;
这比我想要的要匹配。我希望它符合以下所有条件:
{"copyAll": true, "unrelatedA":"xxx"}
{"fileNames": ["aab", "cab"], "unrelatedA":"xxx"}
{"matchesFiles": ["a*"], "unrelatedA":"xxx"}
{"doesntMatchFiles": ["a*"], "unrelatedA":"xxx"}
{"matchesFiles": ["a*"], "doesntMatchFiles": ["*b"], "unrelatedA":"xxx"}
但不符合:
{"copyAll": true, "matchesFiles":["a*"], "unrelatedA":"xxx"}
{"fileNames": ["a"], "matchesFiles":["a*"], "unrelatedA":"xxx"}
{"copyAll": true, "doesntMatchFiles": ["*b"], "matchesFiles":["a*"], "unrelatedA":"xxx"}
{"fileNames": ["a"], "matchesFiles":["a*"], "unrelatedA":"xxx"}
{"unrelatedA":"xxx"}
我猜想我有明显的失踪-我想知道它是什么。
问题是“非”语义。“不需要”不表示“禁止包含”。这只是意味着您不必添加它即可验证该架构。
但是,您可以使用“ oneOf”以更简单的方式满足您的规范。请记住,这意味着“只有这些模式之一可以验证”。以下架构实现了您要解决的属性切换:
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"required": [
"unrelatedA"
],
"properties": {
"unrelatedA": {
"type": "string"
},
"fileNames": {
"type": "array"
},
"copyAll": {
"type": "boolean"
},
"matchesFiles": {
"type": "array"
},
"doesntMatchFiles": {
"type": "array"
}
},
"oneOf": [
{
"required": [
"copyAll"
]
},
{
"required": [
"fileNames"
]
},
{
"anyOf": [
{
"required": [
"matchesFiles"
]
},
{
"required": [
"doesntMatchFiles"
]
}
]
}
]
}
我在编程一个订单提交页面时遇到了一个相当大的问题,该页面的目的是提交一个订单的争议--提供两个字段被填写,但只有当一个字段少于另一个字段时。 基本上,一个是下拉,另一个是争端框,查询如下: 如果DispotestExtBox=“”而下拉框=“请选择...” 一切正常-提交按钮已启用 如果DisportestExtBox!=“”而下拉框=“请选择...” 错误(反之亦然,因此如果填充了Dispone
问题内容: 如何查询或过滤一个字段不等于另一个字段?即,其中document1.city1.name不等于document1.city2.name。 这个的一些版本? http://www.elasticsearch.org/guide/zh- CN/elasticsearch/reference/current/search-request-script- fields.html 问题答案: 是
问题: 我已经在lucene索引中索引了NGA Geonames地名录。我需要模糊查询一个字段(地名),但将查询限制为具有特定国家代码的记录。下面是我正在运行的一个示例查询 我没有使用SOLR,我已经做了大量的研究和尝试,但我没有明确的答案,可能是我的速度太慢了。 我想对印度进行模糊搜索,但我只想要与“in”(国家代码)完全匹配的记录
我开始使用验证框架用jax-rs验证json请求 是否可以根据另一个字段验证一个字段? 提前致谢
问题内容: 考虑具有一个字符串和两个数组的JSON表示形式。例如, 在上述情况下,需要现场,但和被 有条件地 基于所述值所需的反序列化。换句话说,如果只需要有值和如果只要求有一个值。 当前,我在Jackson和Java中工作,并且能够通过创建以下代码来实现使字段成为强制性的: 但我不能只是附加其他到或因为它依赖的价值。 我怎么能有条件地要求和反序列化基础上的价值? 另外,我将要执行额外的检查,例如
表1:字段:ID1 表2:字段:ID2