Arrays Perl:如何迭代多个对象中的数组并从webservice提取值

Arrays Perl:如何迭代多个对象中的数组并从webservice提取值,arrays,perl,foreach,Arrays,Perl,Foreach,我请求一个web服务并得到一个JSON响应: { "timestamp" : "2019-06-11T08:04:35Z", "version" : "0.5", "document" : [ { "href" : "http://opac.sub.uni-goettingen.de/DB=1/PPNSET?PPN=1629107239", "item" : [ { "href

我请求一个web服务并得到一个JSON响应:

{
   "timestamp" : "2019-06-11T08:04:35Z",
   "version" : "0.5",
   "document" : [
      {
         "href" : "http://opac.sub.uni-goettingen.de/DB=1/PPNSET?PPN=1629107239",
         "item" : [
            {
               "href" : "http://opac.sub.uni-goettingen.de/DB=1/PPNSET?PPN=1629107239",
               "label" : "40 623 a",
               "id" : "http://uri.gbv.de/document/opac-de-7:epn:3421084610",
               "available" : [
                  {
                     "service" : "presentation"
                  }
               ],
               "unavailable" : [
                  {
                     "service" : "loan"
                  },
                  {
                     "service" : "interloan"
                  }
               ]
            },
            {
               "href" : "http://opac.sub.uni-goettingen.de/DB=1/PPNSET?PPN=1629107239",
               "label" : "40 623 b",
               "id" : "http://uri.gbv.de/document/opac-de-7:epn:342108467X",
               "available" : [
                  {
                     "service" : "presentation"
                  }
               ],
               "unavailable" : [
                  {
                     "service" : "loan"
                  },
                  {
                     "service" : "interloan"
                  }
               ]
            }
         ],
         "id" : "http://uri.gbv.de/document/opac-de-7:ppn:1629107239"
      }
   ],
   "institution" : {
      "href" : "http://www.sub.uni-goettingen.de",
      "content" : "Niedersächsische Staats- und Universitätsbibliothek Göttingen",
      "id" : "http://uri.gbv.de/organization/isil/DE-7"
   }
}
然后我用Perls Dumper::Data module解析JSON:

my $data = decode_json($resultJson);
print Dumper($data);
它看起来像:

$VAR1 = {
          'document' => [
                          {
                            'item' => [
                                        {
                                          'available' => [
                                                           {
                                                             'service' => 'presentation'
                                                           }
                                                         ],
                                          'id' => 'http://uri.gbv.de/document/opac-de-7:epn:3421084610',
                                          'href' => 'http://opac.sub.uni-goettingen.de/DB=1/PPNSET?PPN=1629107239',
                                          'label' => '40 623 a',
                                          'unavailable' => [
                                                             {
                                                               'service' => 'loan'
                                                             },
                                                             {
                                                               'service' => 'interloan'
                                                             }
                                                           ]
                                        },
                                        {
                                          'available' => [
                                                           {
                                                             'service' => 'presentation'
                                                           }
                                                         ],
                                          'unavailable' => [
                                                             {
                                                               'service' => 'loan'
                                                             },
                                                             {
                                                               'service' => 'interloan'
                                                             }
                                                           ],
                                          'id' => 'http://uri.gbv.de/document/opac-de-7:epn:342108467X',
                                          'label' => '40 623 b',
                                          'href' => 'http://opac.sub.uni-goettingen.de/DB=1/PPNSET?PPN=1629107239'
                                        }
                                      ],
                            'id' => 'http://uri.gbv.de/document/opac-de-7:ppn:1629107239',
                            'href' => 'http://opac.sub.uni-goettingen.de/DB=1/PPNSET?PPN=1629107239'
                          }
                        ],
          'institution' => {
                             'content' => "Nieders\x{e4}chsische Staats- und Universit\x{e4}tsbibliothek G\x{f6}ttingen",
                             'id' => 'http://uri.gbv.de/organization/isil/DE-7',
                             'href' => 'http://www.sub.uni-goettingen.de'
                           },
          'timestamp' => '2019-06-11T08:04:35Z',
          'version' => '0.5'
        };
my $availability = $data->{document}[0]->{item}[0]->{available};

foreach my $key (@{$availability}) {
    if (($key->{'service'}) eq "loan") {
        print $rueckgabe = "Loan: available.\n";
    } elsif (($key->{'service'}) eq "presentation") {
        print $rueckgabe = "Presentation: available.\n";
    } elsif (($key->{'service'}) eq "interloan") {
        print $rueckgabe = "ILL: available.\n";
    } 
}
我想显示每个项目的可用性,但我很难遍历对象中的数组。我的实际代码如下所示:

$VAR1 = {
          'document' => [
                          {
                            'item' => [
                                        {
                                          'available' => [
                                                           {
                                                             'service' => 'presentation'
                                                           }
                                                         ],
                                          'id' => 'http://uri.gbv.de/document/opac-de-7:epn:3421084610',
                                          'href' => 'http://opac.sub.uni-goettingen.de/DB=1/PPNSET?PPN=1629107239',
                                          'label' => '40 623 a',
                                          'unavailable' => [
                                                             {
                                                               'service' => 'loan'
                                                             },
                                                             {
                                                               'service' => 'interloan'
                                                             }
                                                           ]
                                        },
                                        {
                                          'available' => [
                                                           {
                                                             'service' => 'presentation'
                                                           }
                                                         ],
                                          'unavailable' => [
                                                             {
                                                               'service' => 'loan'
                                                             },
                                                             {
                                                               'service' => 'interloan'
                                                             }
                                                           ],
                                          'id' => 'http://uri.gbv.de/document/opac-de-7:epn:342108467X',
                                          'label' => '40 623 b',
                                          'href' => 'http://opac.sub.uni-goettingen.de/DB=1/PPNSET?PPN=1629107239'
                                        }
                                      ],
                            'id' => 'http://uri.gbv.de/document/opac-de-7:ppn:1629107239',
                            'href' => 'http://opac.sub.uni-goettingen.de/DB=1/PPNSET?PPN=1629107239'
                          }
                        ],
          'institution' => {
                             'content' => "Nieders\x{e4}chsische Staats- und Universit\x{e4}tsbibliothek G\x{f6}ttingen",
                             'id' => 'http://uri.gbv.de/organization/isil/DE-7',
                             'href' => 'http://www.sub.uni-goettingen.de'
                           },
          'timestamp' => '2019-06-11T08:04:35Z',
          'version' => '0.5'
        };
my $availability = $data->{document}[0]->{item}[0]->{available};

foreach my $key (@{$availability}) {
    if (($key->{'service'}) eq "loan") {
        print $rueckgabe = "Loan: available.\n";
    } elsif (($key->{'service'}) eq "presentation") {
        print $rueckgabe = "Presentation: available.\n";
    } elsif (($key->{'service'}) eq "interloan") {
        print $rueckgabe = "ILL: available.\n";
    } 
}
我的预期结果是:

项目1:贷款:可用


项目2:贷款:可用。

迭代项目,对于每个项目,迭代可用性

for my $i (0 .. $#{ $data->{document}[0]{item} }) {
    print 'Item ', $i + 1, ': ';
    for my $availability ($data->{document}[0]{item}[$i]{available}) {
        for my $key (@$availability) {
            print { interloan => 'ILL' }->{ $key->{service} } || ucfirst $key->{service},
                ": available\n";
        }
    }
}

如果我在一家德国公司的
$work
查看您的代码,我会告诉您,混合使用德语和英语变量名会让人困惑。坚持使用英语,这样你的公司就能雇佣不会说德语的外国人。尤其是如果你在大学工作,你绝对是对的。我只是复制粘贴而已。很抱歉给你带来了困惑。