【发布时间】:2021-08-19 22:36:29
【问题描述】:
我有一个更大的多维散列,其中包含散列和数组,我能够从仅对整个更大散列有用的散列数组中获取散列数组,现在我正在尝试打印一个特定的键的元素或值。
原始哈希
{
"grade1": {
"sections": {
"groups": "group-a"
}
},
"grade2": {
"sections": {
"groups": "group-b"
}
},
"grade3": {
"departments": [
{
"allowedsubjects": "\ngeneral\nmath\nphysics\nchemistry",
"name": "class1",
"multiple": false,
"description": "",
"required": "optional"
},
{
"allowedsubjects": "\ngeneral\nbiology\nphysics\nchemistry",
"name": "class2",
"multiple": false,
"description": "",
"required": "optional"
}
]
}
}
我的脚本
#!/usr/bin/perl
use Cpanel::JSON::XS;
use strict;
use v5.16.3;
use Data::Dumper;
my $json_text ='{ "grade1": { "sections": { "groups": "group-a" } }, "grade2": { "sections": { "groups": "group-b" } }, "grade3": { "departments": [ { "allowedsubjects": "\ngeneral\nmath\nphysics\nchemistry", "name": "class2", "multiple": false, "description": "", "required": "optional" }, { "allowedsubjects": "\ngeneral\nbiology\nphysics\nchemistry", "name": "class1", "multiple": false, "description": "", "required": "optional" } ] } }';
my $json_obj = decode_json($json_text);
#print Dumper $json_obj;
my %school = %{$json_obj};
## Half working
my @AoH = @{$school{"grade3"}{"departments"}};
my @lines;
for my $href ( @AoH ) {
for my $key ( keys %$href ) {
push @lines, $href->{$key};
}
}
print @lines;
输出
0optionalclass2
general
math
physics
chemistryoptionalclass1
general
biology
physics
chemistry0
如何仅打印基于 class1 或 class2 作为标准的 allowedsubjects 的值。
选择 class1 时的预期输出
general
math
physics
chemistry
【问题讨论】: