如何在perl中提取json值

bsd*_*bsd 1 perl

我试图提取我需要'system1 system2 system3 system4'的值.我过去常常从$json输出中提取内容.我收到了错误ARRAY(0x210e150).请建议如何仅检索这些值.

$VAR1 = {
          'response' => {
                          'mydocs' => [
                                      {
                                        'host' => 'system1'
                                      },
                                      {
                                        'host' => 'system2'
                                      },
                                      {
                                        'host' => 'system3'
                                      },
                                      {
                                        'host' => 'system4'
                                      }
                                      ],
                                      }

                                   };

use LWP::Simple;              
use JSON;    
use Data::Dumper;               


my $url = "https://localhost/content;

my $json = from_json(get($url));

print Dumper($json); # received above output

print "$json->{'response'}->{'docs'}";

for my $data (@$json) {
    my $result = ref $data->{response} ? $data->{response}->{docs} : $data->{response};
    print "Result is $result\n";
}
Run Code Online (Sandbox Code Playgroud)

ste*_*ieb 7

$json是一个哈希引用,而不是数组引用,因此循环@$json不起作用.你需要做的是深入研究哈希数组的开始位置,然后循环:

for my $host (@{ $json->{response}{mydocs} }){
    print "host: $host->{host}\n";
}
Run Code Online (Sandbox Code Playgroud)

...还有这个:

print "$json->{'response'}->{'mydocs'}";
Run Code Online (Sandbox Code Playgroud)

...正在打印出mydocs数组引用的内存地址.我上面做的是循环遍历此数组引用,一次提取一个包含一个哈希引用,然后处理它.