FastAdmin php 解析 yaml 1.2 的问题

FastAdmin php 解析 yaml 1.2 的问题

image

问题

在 QQ 群里一位小伙伴提问 yaml 解析错误,y 变成了 1

size:
    x: 100
    y: 200

被解析成

size:
    x: 100
    1: 200

分析过程

初步查看是 y 键也被解析器自动替换成了布尔值。

到 yaml 的官网查看,的确也没有问题,因为规范也是这么写的。

 y|Y|yes|Yes|YES|n|N|no|No|NO
|true|True|TRUE|false|False|FALSE
|on|On|ON|off|Off|OFF

起初也没觉得是问题,最多觉得这个也太宽泛了。

然后发现在 github 中有人也提出这个问题[1],说 yaml 1.2 有更加规范了一点。

Since 1.0.0 we have removed support of automagic y => true conversion in the spirit of YAML 1.2 after some talks with YAML core developers.

查看了 yaml 最新规范,的确和 1.1 有差别[2],从这个差别中可以看出,针对 boolean 范围作了限制,只可以为 true, True, TRUE

继续查找资料,发现 php PECL 扩展库的 yaml 只支持 yaml 1.1 的解析,这里有一个坑,以为这个 php-yaml[3] 的版本是 yaml 版,其实这里的版本是 php-yaml 的解析软件版本,php-yaml 只针对 yaml1.1 的解析。

那如果需要让 php 解析 yaml 1.2 怎么办呢?

我们继续查找,再次找到一个 symfony/yaml php composer 组件,找到官方的说明[4],验证了 这个 php composer 组件支持的是 yaml 1.2,不会把小伙伴的 y 替换成为 1。

Booleans
Booleans in YAML are expressed with true and false.

最后小伙伴引入了 symfony/yaml 解决了这个 yaml 解析问题。

原文地址: https://www.cnblogs.com/F4NNIU/p/17190099.html (禁止转载)


  1. Key 'y' becomes 'true' https://github.com/nodeca/js-yaml/issues/42 ↩︎

  2. https://perlpunk.github.io/slides.tpcig2018/yamlpp/slide024.html ↩︎

  3. https://pecl.php.net/package/yaml ↩︎

  4. https://symfony.com/doc/current/reference/formats/yaml.html ↩︎

posted on 2023-03-07 23:03  建伟F4nniu  阅读(60)  评论(0编辑  收藏  举报

导航