我有两个非常相似的JSON对象:
{ "a": "a", "b": "b", "c": "c", "attr1": [] }
以及
{ "a": "a", "b": "b", "c": "c", "attr2": [] }
在草案v4中是否有可能为这两个示例定义一个模式?
**UPDATE:**两个JSON示例都不允许附加属性。
谢啦,谢啦
hfsqlsce1#
是的,您可以使用oneOf关键字来接受attr1或attr2,或者使用anyOf关键字(如果两者都存在)。例如:
oneOf
attr1
attr2
anyOf
{ "type":"object", "properties" : { "a" : { "type" : "string" }, "b" : { "type" : "string" }, "c" : { "type" : "string" } }, "oneOf" : [{ "properties" : { "attr1" : { "type" : "array" } }, "required":["attr1"] }, { "properties" : { "attr2" : { "type" : "object" } }, "required":["attr2"] } ] }
请看一下官方文件来审查所有的可能性。正如@Jason在评论中所建议的,如果你还想禁止额外的属性,你只需要把attr1和attr2放在顶层:
{ "type" : "object", "properties" : { "a" : { "type" : "string" }, "b" : { "type" : "string" }, "c" : { "type" : "string" }, "attr1" : { "type" : "array" }, "attr2" : { "type" : "object" } }, "additionalProperties" : false, "oneOf" : [{ "required" : ["attr1"] }, { "required" : ["attr2"] } ] }
yfjy0ee72#
是的,您将attr1设置为null:
data = { "a": "a", "b": "b", "c": "c", "attr1": null }
并根据您需要分配列表或对象:data['attr1'] = [1,2,3]或data['attr1'] = {"k1":1, "k2":2}在处理过程中,您始终可以测试
data['attr1'] = [1,2,3]
data['attr1'] = {"k1":1, "k2":2}
if data['attr1'] is list do else if data['attr1'] is object do
2条答案
按热度按时间hfsqlsce1#
是的,您可以使用
oneOf
关键字来接受attr1
或attr2
,或者使用anyOf
关键字(如果两者都存在)。例如:请看一下官方文件来审查所有的可能性。
正如@Jason在评论中所建议的,如果你还想禁止额外的属性,你只需要把
attr1
和attr2
放在顶层:yfjy0ee72#
是的,您将attr1设置为null:
并根据您需要分配列表或对象:
data['attr1'] = [1,2,3]
或data['attr1'] = {"k1":1, "k2":2}
在处理过程中,您始终可以测试