Если вам нужна переносимость и вы не хотите, чтобы какая-либо предварительная обработка исправляла нестандартные компоненты, тогда YAML - это, вероятно, верный путь.
Большинство, если не все, JSON совместимы с YAML (YAML - это расширенный набор JSON) и поддерживают комментарии.
Для недавнего проекта я почувствовал необходимость отойти от .ini
для нашего файла "настроек по умолчанию", чтобы нам больше не приходилось преобразовывать некоторые строки в целые или логические значения впоследствии (поскольку parse_ini_file
анализирует значения как строки , foo=1
или foo=true
являются строковыми значениями).
JSON показался мне хорошим форматом, но он не поддерживал комментарии. Однако, если вы хотите, чтобы это работало, я бы рекомендовал не реализовывать (или не использовать) отдельный JSON-анализатор вообще. Я создал простую функцию-обертку, которая удаляет комментарии с помощью регулярного выражения, а затем использует собственный json_decode
.
Пример из https://github.com/countervandalism/stillalive/blob/v2018.11/src/Util.php#L21-L41:
class Util {
/**
* From https://stackoverflow.com/a/10252511/319266
* @return bool|array
* @throws ParseException
*/
public static function loadConfig( $filename ) {
$contents = @file_get_contents( $filename );
if ( $contents === false ) {
return false;
}
return json_decode( self::stripComments( $contents ), true );
}
/**
* From https://stackoverflow.com/a/19136663/319266
* @param string $str
*/
public static function stripComments( $str = '' ) {
$str = preg_replace( '![ \t]*//.*[ \t]*[\r\n]!', '', $str );
return $str;
}