1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
use Test;
use JSON::Unmarshal;
plan 18;
class Dog {
has Str $.name;
has Str $.race;
has Int $.age;
}
my $json = q/
[
{
"name": "Roger",
"race": "corgi",
"age": 4
},
{
"name": "Panda",
"race": "wolfish",
"age": 13
}
]
/;
my @dogs = unmarshal($json, Array[Dog]);
ok @dogs ~~ Positional;
isa-ok @dogs[0], Dog;
is @dogs[0].name, "Roger";
is @dogs[0].race, "corgi";
is @dogs[0].age, 4;
isa-ok @dogs[1], Dog;
is @dogs[1].name, "Panda";
is @dogs[1].race, "wolfish";
is @dogs[1].age, 13;
my $json-two = q/
{
"good dog":
{
"name": "Roger",
"race": "corgi",
"age": 4
},
"also a good dog":
{
"name": "Panda",
"race": "wolfish",
"age": 13
}
}
/;
my %dogs = unmarshal($json-two, Hash[Dog]);
ok %dogs ~~ Associative;
isa-ok %dogs{'good dog'}, Dog;
is %dogs{'good dog'}.name, "Roger";
is %dogs{'good dog'}.race, "corgi";
is %dogs{'good dog'}.age, 4;
isa-ok %dogs{'also a good dog'}, Dog;
is %dogs{'also a good dog'}.name, "Panda";
is %dogs{'also a good dog'}.race, "wolfish";
is %dogs{'also a good dog'}.age, 13;
|