希望一些Perl大师能在这里帮助我。基本上我的问题是当一个JSON字符串以" ["而不是" {",在使用decode_json之后,Perl不会将变量视为哈希。
这是一个示例代码。
#!/usr/bin/perl
use JSON;
use Data::Dumper;
$string1 = '{"Peti Bar":{"Literature":88,"Mathematics":82,"Art":99},"Foo Bar":{"Literature":67,"Mathematics":97}}';
$string = '[{"ActionID":5,"ActionName":"TEST- 051017"},{"ActionID":10,"ActionName":"Something here"},{"ActionID":13,"ActionName":"Some action"},{"ActionID":141,"ActionName":"Email Reminder"}]';
print "First string that starts with \"{\" below:\n$string1\n\n";
my $w = decode_json $string1;
my $count = keys %$w;
print "printing \$count's value -> $count\n\n";
print "Second string starts with \"[\" below:\n$string\n\n";
my $x = decode_json $string;
my $count2 = keys %$x;
print "printing \$count2's value -> $count2\n\n";
以下是脚本输出。
$ w和$ x都有效。我必须在另一个json字符串上使用键$ x 而不是键%$ x 。
现在使用它的问题是我在test / jsontest.pl 错误时获得了引用的密钥。它不会停止脚本,但我担心未来的兼容性问题。
最好的方法是什么?
答案 0 :(得分:1)
使用ref
函数确定引用的类型。请参阅perldoc -f ref
。
my $w = decode_json $string1;
my $count = 1;
if( my $ref = ref( $w ) ){
if( $ref eq 'HASH' ){
$count = keys %$w;
}elsif( $ref eq 'ARRAY' ){
$count = scalar @$w;
}else{
die "invalid reference '$ref'\n";
}
}