强制YAML :: Tiny值为数字

问题描述 投票:2回答:2

假设我有以下YAML文件:

---
task:
  1:
    command: '<task1_command>'
    desc: '<task1_description>'
  2:
    command: '<task2_command>'
    desc: '<task2_description>'

我使用Perl和YAML :: Tiny读取文件:

$TASKS = YAML::Tiny->read(<YAML_file>);

我可以正常使用desc /命令值但是如果我使用以下方法编写TASKS数据:

$TASKS->write(<YAML_file>);

我得到以下内容:

---
task:
  '1':
    command: '<task1_command>'
    desc: '<task1_description>'
  '2':
    command: '<task2_command>'
    desc: '<task2_description>'

任务编号介于单引号之间!有没有办法“强迫”YAML :: Tiny将任务值视为“数字”而不是“字符串”?

perl yaml
2个回答
2
投票

似乎没有办法解决这个问题,看起来像这里提交了一个错误---

YAML::Tiny

然而,这可以使用YAML完成,如下所示:

#!/usr/bin/perl

use warnings;
use strict;
use YAML;

{
    no warnings;
    local $YAML::Numify = 1;
}

my $file = YAML::LoadFile('test.yml');

open my $fh, '>', 'output.yml';
print $fh YAML::Dump $file;
close($fh);
  • 使用警告会产生一条消息,包装本地YAML :: Numify是大括号,没有警告会抑制这种情况。输出确实如预期的那样

test.yml

---
task:
  '1':
    desc: '85'
    command: '<task1_command>'
  2:
    desc: '100'
    command: '<task2_command>'

output.yml

---
task:
  1:
    command: '<task1_command>'
    desc: 85
  2:
    command: '<task2_command>'
    desc: 100

2
投票

数据中的12在相应的Perl数据结构中用作哈希键,因此始终必须是字符串。你的read电话的结果就是这个

bless([
  {
    task => {
      1 => { command => "<task1_command>", desc => "<task1_description>" },
      2 => { command => "<task2_command>", desc => "<task2_description>" },
    },
  },
], "YAML::Tiny")

但是,如果你只是使用一个数字字符串就好像它是一个数字,Perl会做正确的事情,所以我想知道你的应用程序是什么,要求这些值是“数字”

© www.soinside.com 2019 - 2024. All rights reserved.