JSON模式验证

3

我正在尝试根据给定的模式验证JSON对象。

JSON数据如下:

{
"list": {
    "places": [
        {
            "name": "Loopsiloo",
            "foursquareID": "54a6s5D4a6s5d4a6s5D4",
            "lat": 26.6546845354889,
            "lon": -99.6846873700158
        },
        {
            "name": "Loopsiloo",
            "foursquareID": "54a6s5D4a6s5d4a6s5D4",
        }
    ],
    "title": "Foo Bar",
    "dateCreated": "2013-01-29T14: 19: 30Z"
}

JSON模式如下:

{
"type":"object",
"$schema": "http://json-schema.org/draft-03/schema",
"required":true,
"properties":{
    "list": {
        "type":"object",
        "id": "list",
        "required":true,
        "properties":{
            "dateCreated": {
                "type":"string",
                "id": "dateCreated",
                "required":true
            },
            "places": {
                "type":"array",
                "minitems": "1",
                "id": "places",
                "required":true,
                "items":
                {
                    "type":"object",
                    "required":true,
                    "properties":{
                        "note": {
                            "type":"string",
                            "id": "note",
                            "required":false
                        },
                        "foursquareID": {
                            "type":"string",
                            "id": "foursquareID",
                            "required":true
                        },
                        "lat": {
                            "type":"number",
                            "id": "lat",
                            "required":true
                        },
                        "lon": {
                            "type":"number",
                            "id": "lon",
                            "required":true
                        },
                        "name": {
                            "type":"string",
                            "id": "name",
                            "required":true
                        }
                    }
                }


            },
            "title": {
                "type":"string",
                "id": "title",
                "required":true
            }
        }
    }
}

我正在使用PHP中的JsonSchema\Validator来验证这个JSON。

$validator = new JsonSchema\Validator;
$validator->check($data, file_get_contents(__DIR__ . '/../model/api-schema.json'));

我的问题是验证器每次都将JSON对象验证为正确。在上面的示例中,“lat”和“lon”属性缺失。即使我省略了整个“places”、“title”或“dateCreated”属性,它也会被验证为正确。

我是否遗漏了什么?我已经阅读了JSON模式的文档,但没有找到能帮助我的内容。


1
你的验证库使用哪个版本的模式标准?在v4中,“required”现在是一个数组,而不是布尔值。 - cloudfeet
有人知道一个好的 PHP schema4 验证器吗?似乎没有一个能正常工作。 - chris
1个回答

1
这对我来说是有效的。
$validator = new JsonSchema\Validator;
$schema = file_get_contents(__DIR__ . '/../model/api-schema.json');
$validator->check(json_decode($data), json_decode($schema));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接