是否可以指定特定的json值可以是单个元素还是数组?
E.g。根据给定的单个json模式,以下两个json文档都可以有效。
"person": {
"name": "john",
"friends": "jack"
}
"person": {
"name": "john",
"friends": ["jack", "jill"]
}
如果你忽略了schema的概念,并且只是在使用诸如rapidjson之类的解析器进行解析时,在读取内容之前简单地检查元素是否是数组,那么肯定是可能的(我相信)。
我想知道的是,如果我采用这种方法,如果我想稍后为它指定一个json模式会是一个问题吗?
答案 0 :(得分:2)
在JSON模式中,您可以指定项目必须匹配的一个类型,或者项目必须至少匹配一个类型的数组(以及其他一些可能性)。
所以是的,你可以有一个模式,说“friends”值是一个字符串,或一个字符串数组。
显然,这意味着客户端代码和服务器代码需要区分这两种情况,并且每种情况都有不同的代码;您可能会考虑发送一个包含一个字符串的数组,而不是某人只有一个朋友来简化所有代码。
答案 1 :(得分:1)
是的,JSON Schema可以使用anyOf
或oneOf
关键字来表达这一点。这些关键字指定了一个模式数组。如果一个或多个模式有效,则anyOf
有效。如果一个且只有一个模式有效,则oneOf
有效。 anyOf
几乎总是足够的。
这是一个JSON Schema,它将验证您的示例人物对象
{
"type": "object",
"properties": {
"name": { "type": "string" }
"friends": {
"anyOf": [
{ "$ref": "#/definitions/friend" },
{
"type": "array",
"items": { "$ref": "#/definitions/friend" }
}
]
}
},
"definitions": {
"friend": { "type": "string" }
}
}