一直在寻找一种从json字符串获取key \值的方法,而不必根据该对构建新的json字符串。
有以下示例代码:(我已经修改了Here的代码)
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper qw(Dumper);
my $grades = {'PetiBar' => {
'Mathematics' => 82,
'Art' => 99,
'Literature' => 88
},
'FooBar' => {
'Mathematics' => 97,
'Literature' => 67
}
};
我照顾的结果是:
'PetiBar' => {
'Mathematics' => 82,
'Art' => 99,
'Literature' => 88
}
这将给两个对象,而不仅仅是一个:
foreach my $val ($grades) {
print Dumper $val;
}
这只会给我没有键的值:
foreach my $key (keys %{$grades}) {
print Dumper $grades->{$key};
}
如何同时获取变量?我是否必须获取键和值,并从中构建一个新的json字符串?
我有一些正在运行的代码here
答案 0 :(得分:2)
以下内容完全符合您的要求,但如果您需要更灵活的内容,请参阅其他答案:
my $petibar = { PetiBar => $grades->{PetiBar} };
答案 1 :(得分:1)
有很多方法可以做你想要的,这是一种方式:
my %slice = map { $_ => $grades->{$_} } qw/Petibar/
最后的qw//
列表意味着您可以根据需要轻松添加更多密钥以从同一结构中提取。
答案 2 :(得分:1)
如果您的Perl至少是版本5.20,则可以使用a hash slice。
my %foo = qw/a 1 c 2 e 3/;
my %bar = %foo{qw/a c/};
是的,没错,%
前面有一个{}
印章。花括号里面可以有一个列表。
这是%bar
将包含的内容。
(
a => 1,
c => 2
)
通常情况下,这将通过哈希来完成,但由于您有哈希引用,因此需要取消引用,然后创建键/值对进入的新匿名引用。
my $slice = { %{$grades}{PetiBar} };
答案 3 :(得分:1)
您可以将Data::Dumper
' configuration variable $Data::Dumper::Varname
设置为密钥的值:
foreach my $key ( keys %$grades ) {
$Data::Dumper::Varname = $key;
## remove '#' to enable the if clause
print Dumper $grades->{$key} # if $key eq "PetiBar";
}
这将产生以下输出:
$FooBar1 = {
'Mathematics' => 97,
'Literature' => 67
};
$PetiBar1 = {
'Mathematics' => 82,
'Literature' => 88,
'Art' => 99
};