use JSON::Path; $json = q( { "array": [ 1, 2, 3], "string": "string_value", "object": { "obj1": "val1", "obj2": "val2" } } ); $arr_path = JSON::Path->new( q($.array) ); $scal_path = JSON::Path->new( q($.string) ); $value = $arr_path->value(); if ( ! ( defined ref $value ) ) { print "SCALAR\n" } elsif ( ref $value eq q(ARRAY) ) { print "ARRAY\n" } else { print "NEITHER" }