【问题标题】:Control order of hashref with YAML::XS使用 YAML::XS 控制 hashref 的顺序
【发布时间】:2015-01-26 20:41:34
【问题描述】:

我正在使用 YAML::XS 库将数据结构转储到 YAML:

foo => {
    bar => [
        {...},
        {...},
    ],
    baz => [
        {...},
        {...},
    ], 
    ...
}

YAML::XS 的默认行为似乎是在转储密钥之前对其进行排序,但这不是我想要的。人类必须阅读和编辑这个脚本的输出,所以可读性是一个问题。有没有办法控制转储密钥的顺序,以便 foo->{baz} 出现在 foo->{bar} 之前?

【问题讨论】:

  • 文档是here
  • 您可以使用 YAML.pm 的 Bless 来执行此操作,但不确定是否可以使用 YAML::XS。
  • @ikegami 我已经读过了,它没有回答我的问题
  • @Floegipoky,确实如此。
  • @ThisSuitIsBlackNot 我最终将YAML::XS 换成了YAML,非常感谢您指出Bless 功能。它比我想用的更强大,但它完成了工作。对于未来的查看者,请注意,除非您在写入时确切知道您期望哪些键,否则您必须检查您正在 Blessing 的每个节点。另请注意,如果密钥不存在,它将生成一个虚拟条目,因此请确保首先检查是否存在:my $blessarray = []; push $blessarray, 'optionalkey' if $table->{optionalkey};

标签: perl yaml libyaml


【解决方案1】:

docs 中可以看出,没有配置哈希顺序的选项。通过查看LibYAML/perl_libyaml.c 中的dump_nodedump_hash 进一步证实了这一点。

【讨论】:

    猜你喜欢
    • 2012-01-28
    • 2012-05-24
    • 1970-01-01
    • 2016-02-11
    • 2019-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-22
    相关资源
    最近更新 更多