perl 如何将YAML重复键转换为数组

brgchamk  于 8个月前  发布在  Perl
关注(0)|答案(1)|浏览(69)

我有一个几乎是YAML的文件,除了重复的键。有没有现有的方法将重复的键转换为数组?
我的代码看起来像:

use Data::Dumper;
use YAML::XS;

local $YAML::XS::ForbidDuplicateKeys = 1;
 
my $x = YAML::XS::Load($yaml_string);
print Dumper $x;

示例输入文件:

info:
    family: skywalker

    person:
        id: 1
        status: active

        details:
            gender: male

            name:
                first: Anakin
                last: Skywalker

        children: Leia
        children: Han Solo

    person:
        id: 58
        status: active

        details:
            gender: female

            name:
                first: Padme
                last: Amidala

        children: Leia
        children: Han Solo

所需输入文件:

info:
    family: skywalker

    person:
    -
        id: 1
        status: active

        details:
            gender: male

            name:
                first: Anakin
                last: Skywalker
        children:
        - Leia
        - Han Solo

    -
        id: 58
        status: active

        details:
            gender: female

            name:
                first: Padme
                last: Amidala
        children:
        - Leia
        - Han Solo
1tuwyuhd

1tuwyuhd1#

YAMLMap的规范说:
一个 mapping 节点的内容是一个无序的 key/value node pairs 的集合,每个key都是唯一的。
您的键不是唯一的,因此您没有有效的YAML(正如您已经知道的-“我有一个几乎是YAML的文件”)。因此,您不应该期望能够使用YAML解析器解析该文件。
我猜你需要为你的“几乎YAML”编写某种解析器,以你想要的格式生成Perl数据结构。然后你可以使用标准的YAML库将该数据结构转换为YAML。

相关问题