Схема 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 ..."
}