0

我为我的脚本提供了一个 JSON 数据文件。然后我使用 decode_json 解码了 JSON 数据...

open my $fh, '<:encoding(UTF-8)', $file ir die;
    my $jsondata = do {local $/; <$fh> };
    my $data = decode_json($jsondata);

    #print Dumper $data

    #I am trying to write a foreach loop in here to pull particular bits of
    #the information out that I want to display (as detailed further below)

close $fh;

Dumper 输出看起来像这样......

$VAR1 = [
          {
            'DataName' => 'FileOfPetsAcrossTheWorld',
            'Information001' => [
                                  {
                                    'Name' => Steve,
                                    'Sex' => 'Male',
                                    'Age' => 24,
                                    'Animals' => [
                                                 'Dog',
                                                 'Cat',
                                                 'Hamster',
                                                 'Parrot
                                                ],
                                    'Location' => 'London',
                                   },
                                   {
                                    'Name' => Dave,
                                    'Sex' => 'Male',
                                    'Age' => 59,
                                    'Animals' => [
                                                 'Fish',
                                                 'Horse',
                                                 'Budgie',
                                                ],
                                    'Location' => 'Paris',
                                   },
                                   {
                                    'Name' => Sandra,
                                    'Sex' => 'Female',
                                    'Age' => 44,
                                    'Animals' => [
                                                 'Snake',
                                                 'Crocodile',
                                                 'Flamingo',
                                                ],
                                    'Location' => 'Syndey',
                                   }
                                 ]
           }
        ];

我正在尝试使用 foreach 外观从这个数据结构中检索输出,以便我可以打印输出......

Dataname: FileOfPetsAcrossTheWorld
Name: Steve
Animals: Dog, Cat, Parrot, Hamster
Location: London

Name: Dave
Animals: Fish, Horse, Budgie
Location: Paris

Name: Sandra
Animals: Snake, Crocodile, Flamingo
Location: Sydey

我已经尝试了各种不同的 foreach 循环和来自在线资源的哈希引用代码片段(以及一些我以前使用过并工作过的代码片段)来迭代并从哈希等中提取数据,但我似乎无法让它在这种情况下工作。除其他错误外,我还收到诸如“不是 HASH 参考...”之类的错误。

我应该使用什么正确方法将这些信息从这种类型的数据结构中提取出来?

4

1 回答 1

1
for my $hash (@$data) {
    say "Dataname: $hash->{DataName}";
    for my $info (@{ $hash->{Information001} }) {
        say "Name: $info->{Name}";
        say 'Animals: ', join ', ', @{ $info->{Animals} };
        say "Location: $info->{Location}";
        say "";
    }
}

史蒂夫的动物顺序不同。悉尼拼写为“Sydey”。

于 2019-06-21T16:16:17.090 回答