任何人都可以建议一个允许任何类型注释的 JSON 解析器,带有 PHP 绑定(bind) - 非常需要配置文件的注释,但 json_decode 不支持它们。
(我知道:1. 其他格式,例如 YAML,2. 注释不是标准的一部分)
更新:
为什么我们不使用:
YAML:基准测试显示速度较慢 - 我们可能希望通过网络发送数据 - 不确定 YAML 是否最适合。
XML:过于冗长 - 需要进行简单的人工编辑。并且不需要 XML 的扩展功能。
INI:数据中存在层次结构和可变深度嵌套。我们需要一种无处不在的格式,因为数据可能与应用程序一起分发或与其他语言的应用程序一起使用。
预处理:数据可以由用户贡献和共享,很难强加要求在将数据添加到应用程序之前进行预处理。
最佳答案
YAML
如果您需要可移植性并且不想要任何预处理或非标准语法,那么 YAML 可能是最佳选择。不过,请注意 dangers and caveats of YAML .
大多数(如果不是全部)JSON 都与 YAML 兼容(YAML 是 JSON 的超集),并且它支持注释。因此初始切换很容易。
带注释的 JSON
我最近需要从 INI files 迁移在 PHP 中支持整数和 bool 值,但仍然支持注释。
JSON 似乎是一种很好的格式,除了支持注释。如果你想让它工作,你不需要一个完整的自定义 JSON 解析器。它可以与简单的包装器一起使用,该包装器去除评论后使用 native json_decode
。 (这适用于受信任的人创作的理智内容。如果您允许疯狂的输入,则可能有一种方法可以打破这一点。)
代码来自 github.com/countervandalism/stillalive , 正则表达式来自 @makaveli_lcf :
class JsonUtil {
/**
* From https://stackoverflow.com/a/10252511/319266
* @return array|false
*/
public static function load( $filename ) {
$contents = @file_get_contents( $filename );
if ( $contents === false ) {
return false;
}
return json_decode( self::stripComments( $contents ), true );
}
/**
* From https://stackoverflow.com/a/10252511/319266
* @param string $str
* @return string
*/
protected static function stripComments( $str ) {
return preg_replace( '![ \t]*//.*[ \t]*[\r\n]!', '', $str );
}
}
关于php - 支持注释的 PHP JSON 解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8148797/