You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何访问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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 14:20:35