【问题标题】:Perl - from JSON to object/ hashPerl - 从 JSON 到对象/哈希
【发布时间】:2016-11-29 09:21:17
【问题描述】:

我必须在下面编码:

#!/usr/intel/bin/perl

use strict;
use warnings;

use JSON::XS;

my $json = '{"Object1":{"Year":"2012","Quarter":"Q3","DataType":"Other 3","Environment":"STEVE","Amount":125},"Object2":{"Year":"2012","Quarter":"Q4","DataType":"Other 2","Environment":"MIKE","Amount":500}}';

my $arrayref = decode_json $json;

for my $array(@$arrayref){
        for my $key (keys(%$array)){
                my $val = $array->{$key};
                print "$key: $val\n";
        }

}

当我编译它时,它会打印出错误“在 generator.pl 第 12 行不是数组引用。”。

我想将JSON解析为一个对象,并根据该对象的属性获取数据。我该怎么做?

我希望在我解析之后,我可以用来比较字符串,打印,循环等等。

【问题讨论】:

  • 这是一个哈希引用。您可以通过 ref 内置发现。或者通过处理复杂数据结构的模块之一打印整个内容,例如Data::Dumper
  • 我不知道它会返回什么,因为有不止一个值和属性,所以我希望它以数组的形式出现,所以我可能会以数组[0].Year的形式打印, array[1].Quarter...类似的东西,或者如果没有,我如何使用哈希中的值?
  • @zdim 我该如何使用它?
  • ref 告诉您它是 HASH 还是 ARRAY(或其他)或不是参考 - 请参阅 ref 的文档。顶层可能是 hashref (这不是严格要求的),在你的情况下,这就是你所拥有的。然后你迭代keys %$hashref(你称之为$arrayref)。或者,use Data::Dumper; print Dumper $reference; 查看$reference 中的全部内容。

标签: json perl


【解决方案1】:

不是数组引用,是哈希引用:

#!/usr/intel/bin/perl

use strict;
use warnings;

use JSON::XS;
use Data::Dumper;

my $json = '{"Object1":{"Year":"2012","Quarter":"Q3","DataType":"Other 3","Environment":"STEVE","Amount":125},"Object2":{"Year":"2012","Quarter":"Q4","DataType":"Other 2","Environment":"MIKE","Amount":500}}';

my $arrayref = decode_json $json;

print Data::Dumper->Dump([$arrayref], [qw(arrayref)]);

然后输出:

$arrayref = {
              'Object2' => {
                             'Quarter' => 'Q4',
                             'Year' => '2012',
                             'Amount' => 500,
                             'DataType' => 'Other 2',
                             'Environment' => 'MIKE'
                           },
              'Object1' => {
                             'Amount' => 125,
                             'DataType' => 'Other 3',
                             'Year' => '2012',
                             'Environment' => 'STEVE',
                             'Quarter' => 'Q3'
                           }
            };

【讨论】:

    【解决方案2】:

    那里没有数组;它是散列的散列。

    my $hashref = decode_json $json;
    
    for my $object_name (sort keys %$hashref){
            print "In $object_name:\n";
            for my $key (sort keys %{ $hashref->{$object_name} }){
                    my $val = $hashref->{$object_name}{$key};
                    print "$key: $val\n";
            }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-07-09
      • 1970-01-01
      • 2015-08-25
      • 2023-03-25
      • 2014-06-18
      • 2012-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多