Проверка структуры JSON объекта
Описание
Сделал в сайте возможность импортировать .json файл.
Вот допустим пользователь импортировал какой-то JSON. Оно приходит, я делаю JSON.parse() и получаю какой-то объект. Теперь мне надо проверить, чтобы структура объекта точь-в-точь совпало с такой структурой.․․
{
title: String,
date: Number,
poles: Array<{
question: String,
answer: Number,
cases: Array<String>,
}>,
}
...так же не был null, undefined или что-то ещё.
Мой вариант
Мое решение - пройти по объекту через Reflect.get() и проверить типы с помощью typeof() и instanceof. Пример:
const object = // допустим объект получили
if (object && typeof(object) == `object`) {
const title = Reflect.get(object, `title`);
if (title && typeof(title) == `string`) {
...
} else {
throw new TypeError(`Invalid structure.`);
}
} else {
throw new TypeError(`Invalid structure.`);
}
Но мне этот метод кажется очень... "чайничным".
Вопрос
Может вы предложите методы получше?
Ответы (1 шт):
Если вы не предполагаете частое изменение схемы, то её можно захардкодить как набор проверок. Если схема должна быть динамической, то можно воспользоваться json-schema и готовым валидатором (https://www.npmjs.com/search?q=json-schema).
Reflect.get использовать не обязательно. if (typeof(object.title) !== 'string') тоже будет работать.