Проверка схемы в коде Visual Studio работает только для первого элемента массива за раз - PullRequest
0 голосов
/ 27 февраля 2019

У меня странная проблема с проверкой встроенной схемы JSON кода MS Visual Studio (версия 1.31.1 ), которую я попытался проиллюстрировать здесь как минимальный *Пример 1004 *, complete и проверяемый .

Итак, для этого примера давайте предположим, что у нас есть файл с именем myjson.json , который долженбыть проверенным по файлу схемы myschema.json (полное содержимое файла приведено ниже).

В этом созвездии я ожидаю, что если вы наведете указатель мыши непосредственно на элемент (или элемент)значение) В редакторе VSCode будет отображаться соответствующий текст описания из файла схемы.

Вместо этого это работает только для первого элемента в foodItems (Рисунок 1).Для всех остальных элементов ничего не отображается. (Рисунок 2).Похоже, что другие элементы вообще не обрабатываются редактором.

Я что-то здесь не так делаю или это недостаток в VSCode?

Рисунок 1 - Мышьнаведение и проверка работоспособности для первого элемента Mouse hover and validation working for the first item

Изображение 2 - наведение и проверка мыши не работают для всех последующих элементов Mouse hover and validation not working for all subsequent items


Содержимое файла:


myschema.json

{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "title": "My Schema",
    "type": "object",
    "properties": {
        "foodItems": {
            "type": "array",
            "items": [ {"$ref": "#/definitions/foodItem"} ]
        }
    },
    "definitions": {
        "foodItemApple": {
            "type": "object",
            "properties": {
                "name": {
                    "const": "Apple"
                },
                "amount": {
                    "type": "number",
                    "description": "The current amount of apples"
                }
            },
            "required": ["name", "amount"],
            "additionalProperties": false
        },
        "foodItemOrange": {
            "type": "object",
            "properties": {
                "name": {
                    "const": "Orange"
                },
                "amount": {
                    "type": "number",
                    "description": "The current amount of oranges"
                }
            },
            "required": ["name", "amount"
            ],
            "additionalProperties": false
        },
        "foodItemCherry": {
            "type": "object",
            "properties": {
                "name": {
                    "const": "Cherry"
                },
                "amount": {
                    "type": "number",
                    "description": "The current amount of cherries"
                }
            },
            "required": ["name", "amount"],
            "additionalProperties": false
        },
        "foodItem": {
            "anyOf": [
                {"$ref": "#/definitions/foodItemApple"},
                {"$ref": "#/definitions/foodItemOrange"},
                {"$ref": "#/definitions/foodItemCherry"}
            ]
        }
    }
}

myjson.json

{
    "$schema": "./myschema.json"  ,
    "foodItems": [
        {
            "name": "Apple",
            "amount": 0
        },
        {
            "name": "Orange",
            "amount": 0
        },
        {
            "name": "Cherry",
            "amount": 0        
        }
    ] 
}

1 Ответ

0 голосов
/ 27 февраля 2019

Похоже, вы сделали ошибку, которую очень легко упустить.

items может быть массивом объектов схемы JSON или объектом схемы JSON.

Если это объект,тогда все элементы в соответствующем массиве должны соответствовать подсхеме (что вам нужно).

Если это массив, он применяет схемы в массиве к объектам в соответствующем массиве с тем же индексом (которыйэто то, что у вас есть).

Если «items» является схемой, проверка завершится успешно, если все элементы в массиве
успешно подтвердят соответствие этой схеме.

Если «items»является массивом схем, проверка завершается успешно, если каждый элемент
экземпляра проверяется по схеме в той же позиции
, если таковая имеется.

https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-6.4.1

По сути, удалите квадратные скобки вокруг схемы из значения свойства items.

Однако я не проверял вашу схему на наличие других проблем.

...