PHP YAML 解析器 [关闭]

Posted

技术标签:

【中文标题】PHP YAML 解析器 [关闭]【英文标题】:PHP YAML Parsers [closed] 【发布时间】:2010-09-22 14:26:58 【问题描述】:

有谁知道 php 的优秀 YAML 解析器?如果是这样,这个库的优缺点是什么?

【问题讨论】:

尝试“spyc”库spyc.sourceforge.net +1 虽然没有建设性,但这个页面对我很有帮助 考虑到对这个问题的最高投票答案的质量,令人惊讶的是,这个问题以“不具建设性”而结束。 我刚刚发布了我的 BabyYaml 解析器,它是 Yaml 的一个更简单的表亲,如果你有兴趣可以在这里查看:github.com/lingtalfi/BabyYaml 我必须同意 ErickRobertson 和 dreftymac 这确实很好地回答了我的问题,并且关闭它阻止了进一步可能的好答案。 【参考方案1】:

symfony framework 大量使用了 YAML,这个blog post by Grégoire Hubert 演示了在非 symfony 项目中使用他们的 YAML 库。

【讨论】:

【参考方案2】:

间谍:https://github.com/mustangostang/spyc

纯PHP实现,无需对服务器进行任何修改即可安装。如果速度非常重要,它可能不是理想的解决方案,但如果您将 YAML 用于配置或相对低容量的使用,它是一个很棒的解决方案。

给定一个 YAML 文档,Spyc 将返回一个数组,您可以随意使用该数组。

require_once "spyc.php";
$data = Spyc::YAMLLoad($myfile);

给定一个数组,Spyc 将返回一个字符串,其中包含从您的数据构建的 YAML 文档。

$yaml_str = Spyc::YAMLDump($myarray);

【讨论】:

+1 我只是想要一种在导入脚本中使用 YAML 的快速简便的方法。我的应用程序不需要任何支持,只需要导入(可能有一天会导出)。我发现被列为“又一个 YAML 解析器”的 spyc 是一键式解决方案。我将一个脚本放入我的脚本文件夹中,将其包含在内,然后调用一种方法。没有比这更容易的了,现在我要回去工作了——消除了障碍。 过时且大量解析 yaml 文件不正确(部分数据丢失)。【参考方案3】:

如果您在项目中使用大量 YAML,您可能会发现像 spyc 或 Symfony YAML 这样的纯 PHP 库不够快。 C YAML 解析器至少有两个 PHP 绑定:

yaml - LibYAML YAML 1.1 解析器库的包装器 syck - Syck YAML 1.0 解析器库的包装器

【讨论】:

【参考方案4】:

试试sfYaml,这是我所知道的最好的。

Symfony 和 Doctrine ORM 正在使用这个。

要获取它,您可以Download Doctrine 1.2 并从vendor 目录中提取sfYaml

让我们知道它是否适合您的需求。

【讨论】:

【参考方案5】:

如果您需要快速测试您的 YAML,我构建了:http://yaml-online-parser.appspot.com/。它帮助我编写 YAML,尤其是在刚学习的时候。

【讨论】:

【参考方案6】:

最后更新:2017 年 7 月 26 日

以下是 PHP 中 YAML 状态的总结:

C 库的包装器:如果您需要绝对速度,您可能需要这些: php-yaml:LibYAML 的包装器。可作为 PECL 扩展使用;它也是PHP's docs 上的那个。 syck:绑定到syck;也可作为 PECL 扩展。 (日期,见下文)

纯 PHP 实现:

sfYaml:Symfony 的 YAML 组件。你可以看到它的作者的动机here。他想要“易于使用、快速、经过单元测试且错误消息清晰的东西。” spyc: 没有依赖关系的 YAML 解析器

在撰写本文时,上述库的最新版本发布日期和它们支持的 YAML spec 版本(1.2 是最新版本)是:

php-yaml   1.3.0     2016-09-24     YAML 1.1  [PHP 5]
php-yaml   2.0.0     2016-09-24     YAML 1.1  [PHP 7]
syck       0.9.3     2008-11-18     YAML 1.0
sfYaml     3.3.5     2017-06-15     YAML 1.1, most of 1.2
spyc       0.6.2     2017-02-24     YAML 1.1 

【讨论】:

还有其他鲜为人知的库(如 this one,来自 Horde 项目),但我不想深入研究这些。 我已经使用 sfYaml 大约两年了,在性能测试中我意识到 sfYaml::parse() 占用了大部分处理时间。我用 php-yaml 替换了它,应用程序现在快了 70%!这是一个巨大的差异。 2019 年 PHP 更新:“spyc”有很多问题,而“sfYaml”工作正常。【参考方案7】:

Symfony2 有一个 YAML 组件,它支持大部分 YAML 1.2 规范

https://github.com/symfony/Yaml

【讨论】:

这是一个很好的答案,因为 Symfony2 YAML 解析器并没有过时。 sfYaml 例如是。

以上是关于PHP YAML 解析器 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Helm 升级引发 YAML 解析器错误

你如何防止 yaml-cpp 解析器删除所有注释?

cocos2d-x 高效稳定的 YAML 解析器

简单的 C++ MIME 解析器 [关闭]

Yaml 中的三元运算符

pycharm编写脚本区域右键没有执行按钮怎么处理?我已经设置了解析器!