簡體   English   中英

從Perl數據結構序列化YAML文檔

[英]Serialize YAML document from Perl data structure

我正在嘗試從數據結構(尤其是哈希數組)中打印出YAML文檔,這就是我認為YAML :: dump返回的結果。 這是我用來構建YAML文檔並將其序列化的Perl代碼。

my @tagobj_header_table =
{
core => {
    type => $tagobj_type,
    size => $tagobj_size,
    blob => $tagobj_blob,
},
text => {
     lines => {
     {
         offset => 0,
         length => 1
     },
     {
         offset => 1,
         length => 5,
     },
     {
         offset => 6,
         length => 7,
     },
     {
         offset => 13,
         length => 13,
     },
     {
         offset => 26,
         length => 1,
     }
     }
  }
};

my $dumper = YAML::Dumper->new;
my $tagobj_contents = $dumper->dump(@tagobj_header_table);
print $tagobj_contents;

這是我希望YAML文檔看起來像的樣子,並帶有一些Perl字符串替換。

---
core:
    type: $tagobj_type
    size: $tagobj_size
    blob: $tagobj_blob
text:
    lines:
        - offset: 0
          length: 1
        - offset: 1
          length: 5
        - offset: 6
          length: 7
        - offset: 13
          length: 13
        - offset: 26
          length: 1

以下是控制台的輸出。

---
core:
    blob: build\content\objects\36d80951814b5f08c7ba34cd7a5459b4c212ee6200ce247ac2a13d24b2fc0d57
    size: 31
    type: blob/text
text:
    lines:
        HASH(0x4d1b840):
            length: 13
            offset: 13
        HASH(0x4d1df38):
            length: 5
            offset: 1
        HASH(0x4d1eee8): ~

您使用的Perl數據結構與所需的YAML數據不對應。 它只是偶然地編譯,您肯定已經看到警告

匿名哈希中元素的奇數個

當您執行代碼時。 請不要忽略警告,尤其是在尋求代碼幫助時

在YAML中, lines元素是一個數組,而您的Perl數據將其作為哈希值。 您需要將方括號{ ... }替換為方括號[...]

我還建議您避免使用YAML::Dump ,這是對YAML::Tiny模塊的誤解。 YAML::XSYAML::XS的首選Perl實現,並且是出色的libyaml庫的綁定

這不是YAML問題。 lines應該映射到arrayref而不是hashref:

text => {
     lines => { # this is an hashref, so
     {
         offset => 0,
         length => 1
     }, # this is a hash key, and gets stringified: "HASH(0x4d1df38)"
     {
         offset => 1,
         length => 5,
     }, # and this is a hash value
     {
         offset => 6,
         length => 7,
     }, # this is a key, also stringified: "HASH(0x4d1b840)"
     {
         offset => 13,
         length => 13,
     }, # and this is a value...
     {
         offset => 26,
         length => 1,
     }
     }
  }
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM