【发布时间】:2021-03-20 23:36:03
【问题描述】:
我正在尝试从 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'};
但是,我不知道如何遍历项目数组。我尝试了for 和foreach 以及各种取消引用组合,它一直告诉我我循环的值仍然是一个数组。如果$data->{'items'} 是一个数组,那么大概我应该能够做一些变化
foreach my $item ($data->{'items'})
或
my @items = $data->{'items'};
for (@items)
{
# stuff
}
但是,我不断返回数组,我必须添加 ->[0] 才能获得特定值。
【问题讨论】:
-
请记住,Perl 数据结构和 JSON 几乎相同。它非常便携。