Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在perl中提取json值_Perl - Fatal编程技术网

如何在perl中提取json值

如何在perl中提取json值,perl,Perl,我正在尝试提取我需要的值“system1 system2 system3 system4”。我曾经从$json输出中提取内容,如下所示。我收到错误数组(0x210e150)。请建议如何仅检索这些值 $VAR1 = { 'response' => { 'mydocs' => [ {

我正在尝试提取我需要的值“system1 system2 system3 system4”。我曾经从
$json
输出中提取内容,如下所示。我收到错误
数组(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";
}

$json
是散列引用,而不是数组引用,因此在
@$json
上循环将不起作用。您需要做的是深入研究哈希数组的起始位置,然后循环:

for my $host (@{ $json->{response}{mydocs} }){
    print "host: $host->{host}\n";
}
…这是:

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

…正在打印
mydocs
数组引用的内存地址。我在上面所做的是循环这个数组引用,每次提取它包含的每个哈希引用,然后处理它。

$json
是一个哈希引用,而不是数组引用,所以循环
@$json
将不起作用。您需要做的是深入研究哈希数组的起始位置,然后循环:

for my $host (@{ $json->{response}{mydocs} }){
    print "host: $host->{host}\n";
}
…这是:

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

…正在打印
mydocs
数组引用的内存地址。我在上面所做的是循环这个数组引用,每次提取它包含的每个哈希引用,然后处理它。

数组(0x210e150)不是错误。它是数据结构的字符串表示/地址。该代码对于所显示的输出没有意义。如果您显示为
$VAR1
,则
$json
中没有数组引用。您还不断引用一个键
docs
,但数据中只有
mydocs
。如果输出
数组(0x210e150)
来自
打印“$json->{'response'}->{'docs'}
行,那么假设有一个键
docs
(而不是
mydocs
),那么它几乎是正确的,因为它包含一个数组ref,其中包含一组哈希ref,如果您
打印它,它将显示地址。您可以
转储程序
像上面那样查看其他内容。
数组(0x210e150)
不是错误。它是数据结构的字符串表示形式/地址。代码对于您显示的输出没有意义。
$json
中没有数组引用,如果这是您显示为
$VAR1
的数组引用。
docs
也一直引用一个键,但数据中只有
mydocs
。I如果输出
数组(0x210e150)
来自
print“$json->{'response'}->{'docs'}
行,那么它几乎是正确的,假设有一个键
docs
(而不是
mydocs
),因为它包含一个数组引用,其中包含一组哈希引用,如果
print
,它将显示地址。您可以
转储程序
像上面那样查看其他内容。