将数组添加到没有引用的数组哈希中

疯狂的格鲁戈

我正在使用API​​来获取信息并将其保存到文件中

#!/bin/perl
use strict;
use warnings;
use JSON;
use Data::Dumper;

my %Hash;
my @Array;
my $url = "https://foo/bar"
my $apidata = `/usr/bin/curl -k -u $url`
my $apidatajson = decode_json $apidata;
my $i=0;

foreach(@{ $apidatajson->{category} }){
   @Array=();
   my $Name=$apidatajson->{category}[$i]{Name};
   my $value=$apidatajson->{category}[$i]{Value};
   
   push(@Array,($Name,$value));
   $Hash{$Name}=@Array; # Output 1
   $Hash{$Name}=\@Array; # Output 2

   $i++;

}
print Dumper \%Hash;

输出1看起来像这样:

$VAR1{
  "FooName2" => 2;
  "FooName" => 2;
};

输出2看起来像这样:

$VAR1{
  "FooName2" => [
               "FooName2"
               "FooValue2"
              ]
   "FooName" => $VAR1 -> {'FooName2'}
};

我需要它看起来像这样:

$VAR1 {
   "FooName2" => [
               "FooName2"
               "FooValue2"
                ]   
   "FooName" => [
               "FooName"
               "FooValue"
                ]
}

所以本质上,我要问的是,如何在不使用引用的情况下将数组的内容保存在哈希中,这样就不会弄乱除最后一个条目之外的所有条目?

胸部

您问题中的代码不是您正在运行的代码。特别是,我怀疑您没有该行my @Array = (),而是@Array = ()(没有my)。

因此,使用$Hash{$Name} = \@Array;foreach循环外部声明的数组的引用(因为实际上在循环内部没有声明),这就是为什么哈希表的两个值都相同的原因。

如果@Array在循环中声明,则代码可以正常工作。

补充说明:

  • 您似乎在“ foreach”循环和C样式的for循环之间感到困惑。您的循环应为:

     for (@{ $apidatajson->{category}}){
         my @Array;
         my $Name  = $_->{Name};
         my $value = $_->{Value};
    
         push(@Array,($Name,$value));
         $Hash{$Name} = \@Array;
     }
    

    或者,由于您并非真正需要@Array,只需:

     for (@{ $apidatajson->{category}}){
         my $Name  = $_->{Name};
         my $value = $_->{Value};
    
         $Hash{$Name} = [$Name, $value];
     }
    

    或者,如果您需要保留$i

     for my $i (0 .. $#{$apidatajson->{category}}) {
          my $Name  = $apidatajson->{category}[$i]{Name};
          my $value = $apidatajson->{category}[$i]{Value};
    
          $Hash{$Name} = [$Name, $value];
     }
    
  • 您无需调用curl即可发出http请求。相反,您可以使用Perl模块,例如LWP::Simple

     use LWP::Simple;
     my $apidata = get("https://foo/bar") or die "Failed to get data from API!";
    

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将具有重复键的哈希添加到数组

将哈希添加到每个内部double的数组中

将数组添加到Perl中的哈希

将值添加到PowerShell中的哈希中的现有数组?

将数组添加到已存储数组的哈希条目

将数组添加到数组中

将数组添加到数组中

将哈希添加到现有哈希数组的红宝石方法是什么?

将图像src添加到JavaScript中没有HTTP地址的数组中

将所有行的结果添加到数组中

将键值对添加到数组中的所有对象

如何将数组添加到哈希图中

将数组中的数组值添加到数组值

PHP将数组添加到另一个没有键的数组

将数组添加到没有键 ID 的数组?- PHP

如何使用 Firestore 将数据添加到文档中的哈希映射数组?

仅在数组中没有东西时才添加到数组中吗?

有没有一种方法可以将空元素添加到Javascript数组中?

有没有一种方法可以将变量添加到数组中,例如某种清单?

将键/值对添加到哈希表(嵌套在数组中,嵌套在哈希表中)

如何调试为什么我在 Java 中的对象/数组代码没有将项目添加到包中?

将数组中的对象数组添加到 JSON 中

如何在Reducer中没有任何ID的情况下将数据添加到redux状态数组?

我正在尝试将“成绩”添加到数组中,但并没有按计划进行

将数组添加到Angular中的数组

将数组元素添加到PHP中的数组

将项目添加到数组列表的数组列表中

将数组作为元素添加到JavaScript中的数组

将键/值对添加到数组数组中的对象?