Валидатор JSON-схемы, как проверить, если ключ не является статическим - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь проверить эту конкретную схему:

{
    "messages": [
        {
        "name": "test msg",
        "id": "0x100",
        "signals": {
                    "0": {"name": "Engine RPM", "bit_length": 16},
                    "16": {"name": "Gear", "bit_length": 3},
                    "19": {"name": "Battery Voltage", "bit_length": 5}
                   }
        }
    ]
}

Я использую Python from jsonschema import Draft4Validator для проверки этой схемы ... однако я не уверен, как продолжить.

Это моя текущая проверка схемы:

{
    "$schema" : "https://json-schema.org/schema#",
    "type" : "object",
    "properties" : 
    {
        "messages" :
        {
            "type" : "array",
            "items" : 
            {
                "properties" : 
                {
                    "name" : 
                    {
                        "type" : "string"
                    },
                    "id" : 
                    {
                        "type" : "string"
                    },
                    "signals" : 
                    {
                        "type" : "object"
                    },

                    "properties" :
                    {


                    }
                },
                "required": ["name", "id", "signals"]
            }
        }
    }
}

Проблема, с которой я сталкиваюсь, заключается в том, что я не уверен, как обращаться с объектами, которые находятся в ключе «сигналов», так как они начинаются со строки иНЕ согласованы ("0", "16", "19") ... Как можно проверить это, убедившись, что тип всегда является строкой, независимо от того, является ли строка согласованной.

Спасибо всем, кто ответил заранее.

1 Ответ

0 голосов
/ 16 мая 2019

Я смог сделать это, выполнив следующие действия:

{
    "$schema" : "https://json-schema.org/schema#",
    "type" : "object",
    "properties" : 
    {
        "messages" :
        {
            "type" : "array",
            "items" : 
            {
                "properties" : 
                {
                    "name" : 
                    {
                        "type" : "string"
                    },
                    "id" : 
                    {
                        "type" : "string"
                    },
                    "signals" : 
                    {
                        "type" : "object"
                    },

                    "properties" :
                    {
                        "start_bit" : 
                        {
                            "type" : "object",
                            "properties" :
                            {
                                "name" :
                                {
                                    "type" : "string"
                                },
                                "bit_length" :
                                {
                                    "type" : "string"
                                },
                                "factor" : 
                                {
                                    "type" : "string"
                                },
                                "offset" : 
                                {
                                    "type" : "string"
                                }
                            },
                            "required" : ["name", "bit_length", "factor", "offset"]
                        }
                    }
                },
                "required": ["name", "id", "signals"]
            }
        }
    }
}

Чтобы «избежать» необходимости сохранять последовательность согласованной, в файл валидатора я могу поместить любую строку (очевидно, это имеет больше смысланазвать строку, которая представляет, в моем случае "start_bit"), а затем НЕ требуя ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...