Непонятно о значении propertyNames - PullRequest
0 голосов
/ 19 октября 2018

Вот схема JSON, которая использует propertyNames:

{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "type": "object",
    "propertyNames": {"enum": ["num", "name"]}
}

Я "думаю", смысл этой схемы таков: Соответствующий экземпляр JSON должен быть объектом, а объект должен содержатьсвойство "num" и свойство "name";значение этих двух свойств не указано. Это правильно, означает ли это схема?

Я создал этот экземпляр:

{
   "num": 10
}

Я проверил этот экземпляр по схемеи валидатор говорит, что это действительно.Хм почему?Разве схема не указывает, что объект должен содержать и «num» и «name»?

Ответы [ 3 ]

0 голосов
/ 19 октября 2018

Попробуйте это:

{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "type": "object",
    "required": ["num", "name"]
}

Вы также можете указать тип свойств, как это:

{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "type": "object",
    "required": ["num", "name"]
    "properties": {
        "num": {"type": "number"},
        "name": {"type": "string"}
    }
}

Для получения дополнительной информации, вы можете посетить эту ссылку: https://json -schema.org / понимание-JSON-схема / ссылка / object.html

0 голосов
/ 21 октября 2018

propertyNames - это схема, с которой должны быть действительны все свойства объекта.Давайте рассмотрим менее запутанный пример.

{
  "type": "object",
  "propertyNames": { "maxLength": 3, "minLength": 3 },
  "patternProperties": {
    "": { "type": "number" }
  }
}

Здесь описывается объект, в котором все имена свойств должны иметь длину 3, а все значения свойств должны быть числами.Вот пример.

{
  "usd": 1,
  "eur": 0.86815,
  "gbp": 0.76504,
  "cad": "1.31004",  <= Invalid property value
  "xx": 1.11         <= Invalid property name
}

Возвращаясь к вашему примеру, есть одно свойство, "num", которое действует в отношении propertyNames схемы { "enum": ["num", "name"] }.Поэтому значение в вашем примере является действительным.

0 голосов
/ 19 октября 2018

Я не знаком с подходом схемы, принятым json-schema, и нахожу довольно странным, являются ли примеры определениями или реализациями.Тем не менее, моя интерпретация будет состоять в том, что имена свойств определяются перечислением, которое может быть либо списком чисел

"propertyNames": {"enum": [1,2,3,4]}

, либо списком имен

"propertyNames": {"enum": ["Ellen","Sue","James","Tim"]}

внешняя ставка (в которой я сомневаюсь) будет такой:

"propertyNames": {"enum": [1, "Ellen", 2, "Sue", 3, "James", 4, "Tim"]}

Единственный сценарий, в котором я вижу, что ваш пример действителенв том случае, если слово "enum" предназначено для замены на тип перечисления, и если перечисление может иметь только одно значение, которое вам не нужно использовать массив, но которое в равной степени допустимо, должно быть: {"num": [8,9,10]} и {"name": ["Ellen","Sue","James","Tim"]}

Извините, если это не тот четкий ответ, на который вы надеялись, но я надеюсь, что это может помочь найти решение.

...