Что такое JSON
Что проверяют
Знаете ли вы допустимые типы и понимаете ли ограничения формата.
Как отвечать
Текстовый формат обмена данными, выросший из синтаксиса объектов JavaScript, но независимый от языка. Стал стандартом для веб-интерфейсов из-за простоты и читаемости.
Допустимые типы значений ровно шесть: объект, массив, строка, число, логическое значение, пустое значение. Всё остальное выражается через них.
Строгие правила синтаксиса, на которых чаще всего спотыкаются: ключи только в двойных кавычках, одинарные недопустимы, запятая после последнего элемента запрещена, комментариев нет вовсе.
Ограничения формата, о которых стоит сказать:
- нет типа даты. По соглашению используется строка в международном формате, но это именно соглашение, и разбирать её должен код;
- числа без разделения на целые и дробные. Разборщики обычно приводят их к числу двойной точности, поэтому большие целые теряют точность. Идентификаторы за пределом безопасного диапазона приходится передавать строками, и это реальная ловушка;
- нет двоичных данных: файлы кодируют в текст, что увеличивает объём примерно на треть;
- нет циклических ссылок: попытка сериализовать структуру со ссылкой на саму себя завершится ошибкой;
- порядок ключей формально не гарантирован, поэтому сравнивать объекты сравнением их текстового представления нельзя.
Сопутствующее: тип содержимого в заголовке, кодировка всегда восьмибитная юникодная, для проверки структуры есть отдельный язык описания схемы. Проверка ответа по схеме в автотестах ловит незаявленные изменения формата раньше, чем они дойдут до пользователя.
Альтернативы и когда они уместны: двоичные форматы, когда важны объём и скорость разбора, и формат с отступами для конфигурационных файлов, где нужны комментарии.
Где спотыкаются
Ставят запятую после последнего элемента или комментарий.
Передают большие идентификаторы числом и теряют точность.
Сравнивают объекты по их текстовому представлению.
Не проверяют ответы по схеме.