Задать вопрос
@VFederoff

Как распарсить JSON в Perl?

Всем привет,
Имею сложность с парсингом данных представленных в JSON.
#!/usr/bin/perl
use diagnostics;
use JSON::XS;
use Data::Dumper;
my $json_data='{
  "href" : "http://localhost/profiles",
  "items" : [
    {
      "href" : "http://localhost/id111",
      "Child" : {
        "name" : "Jack",
        "age" : "11",
        "pet" : "Cat"
      }
    },
    {
      "href" : "http://localhost/id303",
      "Child" : {
        "name" : "David",
        "age" : "8",
        "pet" : "Dog"
      }
      },
      {
      "href" : "http://localhost/id516",
      "Child" : {
        "name" : "Merry",
        "age" : "10",
        "pet" : "Hamster"
      }
    }
  ]
}';

print Dumper(decode_json ($json_data));


Вывод:
$VAR1 = {
          'href' => 'http://localhost/profiles',
          'items' => [
                       {
                         'href' => 'http://localhost/id111',
                         'Child' => {
                                      'pet' => 'Cat',
                                      'name' => 'Jack',
                                      'age' => '11'
                                    }
                       },
                       {
                         'href' => 'http://localhost/id303',
                         'Child' => {
                                      'age' => '8',
                                      'name' => 'David',
                                      'pet' => 'Dog'
                                    }
                       },
                       {
                         'href' => 'http://localhost/id516',
                         'Child' => {
                                      'name' => 'Merry',
                                      'pet' => 'Hamster',
                                      'age' => '10'
                                    }
                       }
                     ]
        };


Не могу понять в какие структуры Perl пероводится JSON.
Каким образом, например, для каждого обьекта "Child" распечатать только значения его "name" и "pet"?

Жду ваших советов! Спасибо!
  • Вопрос задан
  • 2200 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
@pcdesign
print Dumper( decode_json($json_data) );

my $ref = decode_json($json_data);
my $arr = $ref->{"items"};
for my $item ( @$arr ){

    print $item->{"Child"}->{"name"}, " ",  $item->{"Child"}->{"pet"};
    print "\n";

}


Результат:

Jack Cat
David Dog
Merry Hamster
Ответ написан
Комментировать
zagayevskiy
@zagayevskiy
Android developer at Yandex
Эта штука называется "ассоциативный массив", в Perl - hash.
Обращаться к значениям можно через {}, например VAR1{" items"}; вернёт вам массив items.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы