在perl中循环使用json

  • 本文关键字:json 循环 perl json perl
  • 更新时间 :
  • 英文 :


我正试图从Ping的json导出中获取一些信息。我生疏的Perl技能让我很失望,因为我正迷失在取消引用的杂草中。与其再把头撞到墙上,我想我应该发布一个问题,因为所有的谷歌搜索都在这里领先。

我的理解是decode_json将项目转换为哈希数组,每个哈希都有字符串和其他一些哈希数组作为内容。这似乎在尝试获取单个字符串值时得到了证实,但前提是我手动指定了特定的数组元素。我不知道如何循环浏览这些项目。

JSON返回如下:

{
"items":[
{
#lots of values here are some examples
"type": "SP",
"contactInfo": {
"company": "Acme",
"email": "john.doe@acme.com"
}
]
}

我在获得的实际值时没有遇到任何问题

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

my $json;
{
local $/; #Enable 'slurp' mode
open my $fh, "<", "idp.json";
$json = <$fh>;
close $fh;
}
my $data = decode_json($json);
#array print $data->{'items'};
#hash print $data->{'items'}->[0];
#print $data->{'items'}->[0]->{'type'};

但是,我不知道如何遍历项目数组。我已经尝试了forforeach以及各种取消引用的组合,它一直告诉我,我循环通过的值仍然是一个数组。如果$data->{'items'}是一个数组,那么我应该能够对进行一些变体

foreach my $item ($data->{'items'})  

my @items = $data->{'items'};
for (@items)
{
# stuff
}

但是,我一直在取回数组,我必须添加->[0]以获取特定值。

$data->{'items'}是对(哈希引用(数组的引用。您需要使用@{ }:取消引用它

use JSON;
use strict;
use warnings;
my $json;
{
local $/; #Enable 'slurp' mode
$json = <DATA>;
}
my $data = decode_json($json);
for my $item (@{ $data->{items} }) {
print "$item->{type}n";
}
__DATA__
{
"items":[
{
"type": "SP",
"contactInfo": {
"company": "Acme",
"email": "john.doe@acme.com"
}
}
]
}

输出:

SP

最新更新