字符串以[而不是{

时间:2017-12-13 10:59:05

标签: json perl hash

希望一些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";

以下是脚本输出。

<code>Script output</code>

$ w和$ x都有效。我必须在另一个json字符串上使用键$ x 而不是键%$ x

现在使用它的问题是我在test / jsontest.pl 错误时获得了引用的密钥。它不会停止脚本,但我担心未来的兼容性问题。

最好的方法是什么?

1 个答案:

答案 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";
    }
}