Схема JSON: можно ли проверить строку является массивом JSON или объектом?

По какой-то причине у меня есть свойство, скажем "ссылки", которое является самой строкой JSON.

    "references": {
      "type": "string"
    },

Но я хочу проверить строку массива JSON (после "декодирования"):

    "references": {
      "type": "array",
      "items": {
        "type": "string",
        "format": "uri"
      }
    },

Возможно ли это сделать с помощью схемы JSON? Тот же вопрос для объектов JSON.

Пример данных:

{"references": "[\"ref 1\", \"ref 2\"]"}

1 ответ

Решение

Короткий ответ - нет, JSON Schema не знает, как выразить это ограничение. У вас есть несколько вариантов, хотя.

Опция 1:contentMediaType

contentMediaType а также contentEncoding Раньше ключевые слова были частью спецификации JSON Hyper-Schema, но они были перенесены в спецификацию проверки схемы JSON в draft-07. Эти ключевые слова используются для описания содержимого не в формате JSON в виде строки. Однако я не вижу причин, по которым вы не могли бы использовать их для описания данных JSON в виде строки. Это только частичное решение, поскольку оно обеспечивает только то, что строка представляет собой JSON, а не массив JSON. Кроме того, вам может быть трудно найти валидатор, который поддерживает это (частично потому, что он новый, а частично, потому что это необычный вариант использования)

{
  "type": "string",
  "contentEncoding": "utf-8",
  "contentMediaType": "application/json"
}

http://json-schema.org/latest/json-schema-validation.html

Вариант 2: пользовательскийformat

Некоторые валидаторы позволяют вам определять собственные форматы для format ключевое слово. Недостатком этого является то, что вы привязаны к конкретной реализации.

{
  "type": "string",
  "format": "json-array"
}

Вариант 3:pattern

Я даже не уверен, что это возможно, но вы можете попытаться придумать регулярное выражение, которое соответствует искомой структуре JSON.

{
  "type": "string",
  "pattern": "... some god awful regex that probably won't work anyway ..."
}
Другие вопросы по тегам