use*_*135 0 perl hash json hashref data-dumper
我有一个$artifact使用Data :: Dumper打印的Perl哈希引用.
输出print Dumper ($artifact);返回以下内容.
$VAR1 = bless( {
'_content' => '{
"results" : [ {
"uri" : "http://localhost:port/myfile.tar"
} ]
}',);
Run Code Online (Sandbox Code Playgroud)
但是,我在尝试专门访问URI的值时遇到问题,即我想检查是否uri有值.
谢谢!
编辑:只是一些背景.我正在使用Artifactory :: Client perl模块中的'artifact_search'方法
要从哈希引用中提取信息,首先需要取消引用.你可以:
print ${$artifact}{uri},"\n";
Run Code Online (Sandbox Code Playgroud)
在这种特定情况下,您可以省略大括号,只需执行以下操作:
print $$artifact{uri},"\n";
Run Code Online (Sandbox Code Playgroud)
但请注意,这可能是模棱两可的,因此符号的样式并不总是适用于解除引用.
或者更新的,可能更清晰的符号(例如像面向对象)
print $artifact->{uri},"\n";
Run Code Online (Sandbox Code Playgroud)
但是,这里有一个很大的警钟bless- 这意味着你可能正在操纵一个物体.在一个对象内戳是非常脏的.你不应该这样做.通常,该对象将包含一个访问器方法,以便为您提供所需的信息.按照惯例,_前缀表示private例如"不要弄乱这个".(不是你应该的)
如注释中所述 - 这是嵌入在对象中的JSON文本字符串.因此,如果您真的开始这样做 - 您可以解析JSON,将其转换为perl数据结构,然后使用它.
但更有可能的是 - 你操纵的对象内置了一些存取方法,你应该使用它们.
所以给出上面的例子:
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use JSON;
my $hashref = {
_content => '{
"results" : [ {
"uri" : "http://localhost:port/myfile.tar"
} ]
}'
};
print Dumper \$hashref;
my $json = JSON->new();
my $json_ob = $json->decode( $hashref->{_content} );
print Dumper \$json_ob;
print $json_ob ->{results}->[0]->{uri};
Run Code Online (Sandbox Code Playgroud)
但是正如评论中提到的那样,你正在使用:
Artifactory::Client非常合理地使用它LWP.
此模块中提供的每个公共方法都返回一个HTTP :: Response对象.
参考HTTP::Response文档给出了这个示例:
if ($artifact->is_success) {
print $artifact->decoded_content;
}
else {
print STDERR $artifact->status_line, "\n";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
906 次 |
| 最近记录: |