Почему все инструменты используют JSON для конфигов?
Why do so many tools have JSON config files?
Разбираемся, почему JSON стал стандартом для конфигурационных файлов в современных инструментах. Рассматриваем его преимущества, недостатки и альтернативы, а также объясняем, почему разработчики выбирают JSON, несмотря на его ограничения.
JSON — это не идеальный формат, но он стал де-факто стандартом для конфигурационных файлов, потому что он прост, читаем и поддерживается практически везде.
- raincole
Почему так много инструментов используют JSON-конфиги‽ Комментировать, почему опции настроены именно так, — это же такое базовое желание… Почему у технических людей такое отвращение к тому, чтобы записывать вещи⁇ Это весь пост. Во-первых, я не знаю, почему это опубликовано на HN. Во-вторых, я не вижу, как «JSON-конфиг» и «записывание вещей» — это два противоположных варианта.
- szatkus
Многие технические специалисты сопротивляются документации, потому что думают, что она даёт им гарантию занятости. Нет, нам просто лень.
- gwbas1c
Почему так много инструментов используют JSON-конфиги‽ 1: Потому что JSON — очень простой формат сериализации для работы. Подозреваю, что у этих инструментов есть классы/объекты конфигурации, которые десериализуются прямо из конфиг-файла. 2: Подозреваю, что многие из этих инструментов написаны на Javascript, а в Javascript с JSON очень легко работать.
- mholt
Для Caddy мы выбрали JSON, потому что он довольно универсален, почти 1:1 отображается на структуры Go (полезно для инициализации расширяемого сервера), и почти всё остальное так или иначе компилируется в JSON, так что вы можете выбрать свой собственный формат конфига: https://caddyserver.com/docs/config-adapters
- zzo38computer
На мой взгляд, JSON — не лучший формат, и у него есть некоторые проблемы. Отсутствие комментариев — одна из причин, как упоминается там. Другая — отсутствие висячих запятых (необязательные висячие запятые были бы полезны для файлов, написанных вручную). Однако это проблемы синтаксиса, а есть ещё и проблемы с данными, такие как отсутствие нормального целочисленного типа, отсутствие Infinity и NaN, отсутствие поддержки наборов символов, отличных от Unicode (и ASCII), отсутствие нормального типа для октетных строк и т. д.