Проверьте JSON против JSON схемы (в Java) - PullRequest
1 голос
/ 16 января 2020

Я использую com.github.fge.jsonschema . Работа в Java.

Ниже приведена схема JSON.

    "$schema": "http://json-schema.org/draft-04/schema#",
    "title": "Employee",
    "description": "employee description",
    "type": "object",
    "properties": {
        "eid": {
            "description": "The unique identifier for a emp",
            "type": "integer"
        },
        "ename": {
            "description": "Name of the emp",
            "type": "string"
        },
        "qual":{
            "$ref": "#/definitions/qualification"   
        }
    },
    "definitions": {
        "qualification": 
        {
            "description": "Qualification",
            "type": "string"
        }
    }
}

, и это JSON для проверки по схеме.

{
    "eid":1000,
    "ename": "mrun",
    "qualification": "BE"
}

Проблема в том, что он правильно проверяет тип (т. Е. Целое число или строку) для eid и ename, если мы передаем какие-либо неправильные данные. Например:

{
    "eid":"Mrun", //should be Integer
    "ename": 72831287, //should be String
    "qualification": 98372489 //should be String
}

Если мы передадим неверный тип только для квалификации, то он будет подтвержден как истинный (т. Е. Он не подтвердит тип для квалификации, возможно, потому, что он вложенный).

Необходимо выполнить проверки для всего JSON.

Есть ли другое решение для проверки вложенных объектов в JSON?

Заранее спасибо.

1 Ответ

0 голосов
/ 16 января 2020

Ваш пример

{
    "eid":"Mrun",
    "ename": 72831287,
    "qualification": 98372489
}

не соответствует вашей схеме. Ваша схема ожидает объекты типа

{
    "eid": "Mrun",
    "ename": 72831287,
    "qual": {
        "qualification": 98372489
    }
}

Но если вы просто хотите повторно использовать определение "квалификации", ваша схема должна выглядеть примерно так:

"properties": {
    "eid": {
        "description": "The unique identifier for a emp",
        "type": "integer"
    },
    "ename": {
        "description": "Name of the emp",
        "type": "string"
    },
    "qualification":{
        "$ref": "#/definitions/qualification"   
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...