Json模式--要求字段基于同一嵌套对象中的字段值。

问题描述 投票:0回答:1

我有一个JSON请求,我试图根据JSON模式进行验证。我想知道是否可以要求一个子schema中的字段以同一个子schema中的字段的值为基础?我试过anyOf,OneOf和IF,Then,Else都没有用。anyOf返回错误 "2个子schema中只有1个匹配",OneOf返回 "2个子schema匹配而不是1个"。

{
"field1":"aaa",
"field2":"bbb"
"field3":{ 
   "isTrue":true,
   "inner1":"1",
   "inner2":"1"
    }
}

所以,对于上面的Json,如果字段isTrue为真,我可以只要求字段inner1和inner2吗?

"field3": {
                                "type": "object",
                                "properties": {
                                    "isTrue": {
                                        "type": 
                                            "boolean"
                                    },
                                    "inner1": {
                                        "type": 
                                            "integer"
                                    },
                                    "inner2": {
                                        "type": 
                                            "string"
                                    }
                                },
                                "anyOf": [
                                    {
                                        "properties": {
                                            "isTrue": {
                                                "const": "true"
                                            }
                                        },
                                        "required": [
                                            "inner1",
                                            "inner2"
                                        ]
                                    },
                                    {
                                        "properties": {
                                            "isTrue": {
                                                "const": "false"
                                            }
                                        },
                                        "required": [
                                            "isTrue"
                                        ]
                                    }
                                ]

                            }

以上是我的违规Json模式。

json jsonschema json-schema-validator
1个回答
1
投票

你的模式应该工作,如果你删除周围的引号。"true""false" -- 它们被视为字符串,而不是布尔值。

(另外,你的数据在inner1和inner2中都使用了字符串,但模式希望第一个字符串是一个整数--可能是转录错误。)

© www.soinside.com 2019 - 2024. All rights reserved.