【问题标题】:How to get data from Perl data structure如何从 Perl 数据结构中获取数据
【发布时间】:2021-04-19 06:15:56
【问题描述】:

我已将 JSON 解析为以下数据结构:

$VAR1 = {
          '041012020' => {
                            'item_number' => 'P2345'
                          },
          '041012021' => {
                            'item_number' => 'I0965'
                          },
          '041012022' => {
                            'item_number' => 'R2204'
                          }
        };

我正在尝试使用以下代码获取 item_numbers 的值,它给了我 HASH 值作为输出,而不是实际的 item_number 值。请指导我获得预期值。

foreach my $value (values %{$json_obj}) {
       say "Value is: $value,";
 }

输出:

Value is: HASH(0x557ce4e2f3c0),
Value is: HASH(0x557ce4e4de18),
Value is: HASH(0x557ce4e4dcf8),

如果我使用相同的代码来获取密钥,它工作得非常好

foreach my $key (keys %{$json_obj}) {
        say "Key is: $key,";
 }

输出:

Key is: 041012020,
Key is: 041012020,
Key is: 041012022,

【问题讨论】:

  • 您的输入是一个 Perl 哈希值。此问题中没有 JSON。

标签: perl data-structures


【解决方案1】:

散列元素的值是对散列的引用 ({ item_number => 'P2345' })。这就是对引用进行字符串化时得到的结果。如果你想要项目编号,你需要告诉 Perl。

for my $value (values %$data) {
   say $value->{item_number};
}

for my $item_number ( map { $_->{item_number} } values %$data ) {
   say $item_number;
}

【讨论】:

  • 感谢您的及时响应,当我同时使用上述两个 sn-ps 时,我得到`在 test.pl 第 41 行中使用未初始化的值。在说中使用未初始化的值 $item_number test.pl 第 45 行。
  • 我将错误命名的 $json_obj(不是 JSON)更改为 $data。始终使用use strict; use warnings;
  • 感谢@Ikegami,它按预期工作,感谢您的帮助
  • 如果这回答了您的问题,正确的回答是检查答案旁边的标记:)
  • 谢谢,我想投票所以我投票了,但也检查了标记。
【解决方案2】:

这是您问题的简短代码。

#!usr/bin/perl $VAR1 = { '041012020' => { 'item_number' => 'P2345' }, '041012021' => { 'item_number' => 'I0965' }, '041012022' => { 'item_number' => 'R2204' } }; 为键 %$VAR1 打印 "$VAR1->{$_}->{item_number}\n";

在块中使用:

for my $key (keys %$VAR1) {
    print "$VAR1->{$key}->{item_number}\n"
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    相关资源
    最近更新 更多