如何访问Perl哈希结构中response字段的全部数据
问题解答
你的问题核心是:$data{'response'}对应的是一个哈希引用,Perl直接打印引用类型时,默认会输出它的内存地址标识(比如HASH(0x8b6640)),而非哈希内部的实际数据。以下是几种获取并输出response全部数据的方法:
方法1:用Data::Dumper正确输出完整结构
你原来的print Dumper(%data->{'response'});写法有误,%data是普通哈希,不是引用,正确的做法是直接将$data{'response'}这个哈希引用传给Dumper:
use Data::Dumper; my %data = ( 'status' => 200, 'message' => '', 'response' => { 'name' => 'John Smith', 'id' => '1abc579', 'ibge' => '3304557', 'uf' => 'XY', 'status' => bless( do{\(my $o = 1)}, 'JSON::PP::Boolean' ) } ); # 获取response的哈希引用 my $resp_hash = $data{'response'}; # 用Dumper输出完整结构 print Dumper($resp_hash);
执行后会清晰打印出response内部的所有键值对,包括那个特殊的JSON::PP::Boolean类型值。
方法2:手动遍历哈希引用的键值
如果需要自定义输出格式,可以遍历哈希引用的键,逐个取出对应的值:
my $resp_hash = $data{'response'}; print "Response data:\n"; foreach my $key (keys %$resp_hash) { my $value = $resp_hash->{$key}; # 处理特殊的Boolean类型,转成可读的1/0 if (ref $value eq 'JSON::PP::Boolean') { $value = $value ? 1 : 0; } print "$key: $value\n"; }
方法3:转成JSON字符串输出
如果需要更通用的结构化格式,可以用JSON模块将哈希引用序列化为JSON字符串:
use JSON; my $resp_hash = $data{'response'}; my $json_str = encode_json($resp_hash); print "Response as JSON: $json_str\n";
输出会是标准的JSON格式:
{"name":"John Smith","id":"1abc579","ibge":"3304557","uf":"XY","status":true}
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

