Perl - доступ к данным из вывода decode_json - PullRequest
0 голосов
/ 21 июня 2019

Я поставляю свой скрипт с файлом данных JSON. Затем я декодировал данные JSON, используя decode_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',
                                   }
                                 ]
           }
        ];

Я пытаюсь получить выходные данные из этой структуры данных, используя внешний вид, чтобы я мог распечатать выходные данные ...

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 в ...».

Какой правильный метод я должен использовать, чтобы извлечь эту информацию из структуры данных такого типа?

1 Ответ

1 голос
/ 21 июня 2019
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".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...