#arrays #json #perl #hash-of-hashes
#массивы #json #perl #хеширование хэшей
Вопрос:
Вопрос новичка.
У меня есть файл json, который выглядит следующим образом:
{
"Controllers":[
{
"Command Status" : {
"Controller" : 0,
"Status" : "Success",
"Description" : "None"
},
"Response Data" : {
"Product Name" : "LSI MegaRAID SAS 9260-8i",
"Serial Number" : "SV30408696",
"SAS Address" : " 500605b005c557f0",
"PCI Address" : "00:01:00:00",
"System Time" : "11/02/2020 01:15:01",
"Mfg. Date" : "01/23/13",
"Controller Time" : "11/02/2020 08:03:07",
"FW Package Build" : "12.15.0-0239",
"FW Version" : "2.130.403-4660",
"BIOS Version" : "3.30.02.2_4.16.08.00_0x06060A05",
"Driver Name" : "megaraid_sas",
"Driver Version" : "07.703.05.00-rc1",
"Vendor Id" : 4096,
"Device Id" : 121,
"SubVendor Id" : 4096,
"SubDevice Id" : 37473,
"Host Interface" : "PCI-E",
"Device Interface" : "SAS-6G",
"Bus Number" : 1,
"Device Number" : 0,
"Function Number" : 0,
"Drive Groups" : 6,
"TOPOLOGY" : [
{
"DG" : 0,
"Arr" : "-",
"Row" : "-",
"EID:Slot" : "-",
"DID" : "-",
"Type" : "RAID1",
"State" : "Optl",
"BT" : "N",
"Size" : "465.25 GB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "N",
"TR" : "N"
},
{
"DG" : 0,
"Arr" : 0,
"Row" : "-",
"EID:Slot" : "-",
"DID" : "-",
"Type" : "RAID1",
"State" : "Optl",
"BT" : "N",
"Size" : "465.25 GB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "N",
"TR" : "N"
},
{
"DG" : 0,
"Arr" : 0,
"Row" : 0,
"EID:Slot" : "252:1",
"DID" : 8,
"Type" : "DRIVE",
"State" : "Onln",
"BT" : "N",
"Size" : "465.25 GB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "-",
"TR" : "N"
},
{
"DG" : 0,
"Arr" : 0,
"Row" : 1,
"EID:Slot" : "252:0",
"DID" : 9,
"Type" : "DRIVE",
"State" : "Onln",
"BT" : "N",
"Size" : "465.25 GB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "-",
"TR" : "N"
},
{
"DG" : 1,
"Arr" : "-",
"Row" : "-",
"EID:Slot" : "-",
"DID" : "-",
"Type" : "RAID0",
"State" : "Optl",
"BT" : "N",
"Size" : "3.637 TB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "N",
"TR" : "N"
},
{
"DG" : 1,
"Arr" : 0,
"Row" : "-",
"EID:Slot" : "-",
"DID" : "-",
"Type" : "RAID0",
"State" : "Optl",
"BT" : "N",
"Size" : "3.637 TB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "N",
"TR" : "N"
},
{
"DG" : 1,
"Arr" : 0,
"Row" : 0,
"EID:Slot" : "252:2",
"DID" : 10,
"Type" : "DRIVE",
"State" : "Onln",
"BT" : "N",
"Size" : "3.637 TB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "-",
"TR" : "N"
},
{
"DG" : 2,
"Arr" : "-",
"Row" : "-",
"EID:Slot" : "-",
"DID" : "-",
"Type" : "RAID0",
"State" : "Optl",
"BT" : "N",
"Size" : "3.637 TB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "N",
"TR" : "N"
},
{
"DG" : 2,
"Arr" : 0,
"Row" : "-",
"EID:Slot" : "-",
"DID" : "-",
"Type" : "RAID0",
"State" : "Optl",
"BT" : "N",
"Size" : "3.637 TB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "N",
"TR" : "N"
},
{
"DG" : 2,
"Arr" : 0,
"Row" : 0,
"EID:Slot" : "252:3",
"DID" : 11,
"Type" : "DRIVE",
"State" : "Onln",
"BT" : "N",
"Size" : "3.637 TB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "-",
"TR" : "N"
},
{
"DG" : 3,
"Arr" : "-",
"Row" : "-",
"EID:Slot" : "-",
"DID" : "-",
"Type" : "RAID0",
"State" : "Optl",
"BT" : "N",
"Size" : "3.637 TB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "N",
"TR" : "N"
},
{
"DG" : 3,
"Arr" : 0,
"Row" : "-",
"EID:Slot" : "-",
"DID" : "-",
"Type" : "RAID0",
"State" : "Optl",
"BT" : "N",
"Size" : "3.637 TB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "N",
"TR" : "N"
},
{
"DG" : 3,
"Arr" : 0,
"Row" : 0,
"EID:Slot" : "252:4",
"DID" : 13,
"Type" : "DRIVE",
"State" : "Onln",
"BT" : "N",
"Size" : "3.637 TB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "-",
"TR" : "N"
},
{
"DG" : 4,
"Arr" : "-",
"Row" : "-",
"EID:Slot" : "-",
"DID" : "-",
"Type" : "RAID0",
"State" : "Optl",
"BT" : "N",
"Size" : "3.637 TB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "N",
"TR" : "N"
},
{
"DG" : 4,
"Arr" : 0,
"Row" : "-",
"EID:Slot" : "-",
"DID" : "-",
"Type" : "RAID0",
"State" : "Optl",
"BT" : "N",
"Size" : "3.637 TB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "N",
"TR" : "N"
},
{
"DG" : 4,
"Arr" : 0,
"Row" : 0,
"EID:Slot" : "252:5",
"DID" : 14,
"Type" : "DRIVE",
"State" : "Onln",
"BT" : "N",
"Size" : "3.637 TB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "-",
"TR" : "N"
},
{
"DG" : 5,
"Arr" : "-",
"Row" : "-",
"EID:Slot" : "-",
"DID" : "-",
"Type" : "RAID0",
"State" : "Optl",
"BT" : "N",
"Size" : "3.637 TB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "N",
"TR" : "N"
},
{
"DG" : 5,
"Arr" : 0,
"Row" : "-",
"EID:Slot" : "-",
"DID" : "-",
"Type" : "RAID0",
"State" : "Optl",
"BT" : "N",
"Size" : "3.637 TB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "N",
"TR" : "N"
},
{
"DG" : 5,
"Arr" : 0,
"Row" : 0,
"EID:Slot" : "252:6",
"DID" : 15,
"Type" : "DRIVE",
"State" : "Onln",
"BT" : "N",
"Size" : "3.637 TB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "-",
"TR" : "N"
}
],
"Virtual Drives" : 6,
"VD LIST" : [
{
"DG/VD" : "0/0",
"TYPE" : "RAID1",
"State" : "Optl",
"Access" : "RW",
"Consist" : "Yes",
"Cache" : "RWTD",
"Cac" : "-",
"sCC" : "ON",
"Size" : "465.25 GB",
"Name" : ""
},
{
"DG/VD" : "1/1",
"TYPE" : "RAID0",
"State" : "Optl",
"Access" : "RW",
"Consist" : "Yes",
"Cache" : "RWTD",
"Cac" : "-",
"sCC" : "ON",
"Size" : "3.637 TB",
"Name" : ""
},
{
"DG/VD" : "2/2",
"TYPE" : "RAID0",
"State" : "Optl",
"Access" : "RW",
"Consist" : "Yes",
"Cache" : "RWTD",
"Cac" : "-",
"sCC" : "ON",
"Size" : "3.637 TB",
"Name" : ""
},
{
"DG/VD" : "3/3",
"TYPE" : "RAID0",
"State" : "Optl",
"Access" : "RW",
"Consist" : "Yes",
"Cache" : "RWTD",
"Cac" : "-",
"sCC" : "ON",
"Size" : "3.637 TB",
"Name" : ""
},
{
"DG/VD" : "4/4",
"TYPE" : "RAID0",
"State" : "Optl",
"Access" : "RW",
"Consist" : "Yes",
"Cache" : "RWTD",
"Cac" : "-",
"sCC" : "ON",
"Size" : "3.637 TB",
"Name" : ""
},
{
"DG/VD" : "5/5",
"TYPE" : "RAID0",
"State" : "Optl",
"Access" : "RW",
"Consist" : "Yes",
"Cache" : "RWTD",
"Cac" : "-",
"sCC" : "ON",
"Size" : "3.637 TB",
"Name" : ""
}
],
"Physical Drives" : 7,
"PD LIST" : [
{
"EID:Slt" : "252:0",
"DID" : 9,
"State" : "Onln",
"DG" : 0,
"Size" : "465.25 GB",
"Intf" : "SATA",
"Med" : "HDD",
"SED" : "N",
"PI" : "N",
"SeSz" : "512B",
"Model" : "ST500DM002-1BD142",
"Sp" : "U",
"Type" : "-"
},
{
"EID:Slt" : "252:1",
"DID" : 8,
"State" : "Onln",
"DG" : 0,
"Size" : "465.25 GB",
"Intf" : "SATA",
"Med" : "HDD",
"SED" : "N",
"PI" : "N",
"SeSz" : "512B",
"Model" : "ST500DM002-1BD142",
"Sp" : "U",
"Type" : "-"
},
{
"EID:Slt" : "252:2",
"DID" : 10,
"State" : "Onln",
"DG" : 1,
"Size" : "3.637 TB",
"Intf" : "SATA",
"Med" : "HDD",
"SED" : "N",
"PI" : "N",
"SeSz" : "512B",
"Model" : "ST4000NM0033-9ZM170",
"Sp" : "U",
"Type" : "-"
},
{
"EID:Slt" : "252:3",
"DID" : 11,
"State" : "Onln",
"DG" : 2,
"Size" : "3.637 TB",
"Intf" : "SATA",
"Med" : "HDD",
"SED" : "N",
"PI" : "N",
"SeSz" : "512B",
"Model" : "ST4000NM0033-9ZM170",
"Sp" : "U",
"Type" : "-"
},
{
"EID:Slt" : "252:4",
"DID" : 13,
"State" : "Onln",
"DG" : 3,
"Size" : "3.637 TB",
"Intf" : "SATA",
"Med" : "HDD",
"SED" : "N",
"PI" : "N",
"SeSz" : "512B",
"Model" : "ST4000NM0033-9ZM170",
"Sp" : "U",
"Type" : "-"
},
{
"EID:Slt" : "252:5",
"DID" : 14,
"State" : "Onln",
"DG" : 4,
"Size" : "3.637 TB",
"Intf" : "SATA",
"Med" : "HDD",
"SED" : "N",
"PI" : "N",
"SeSz" : "512B",
"Model" : "ST4000NM0033-9ZM170",
"Sp" : "U",
"Type" : "-"
},
{
"EID:Slt" : "252:6",
"DID" : 15,
"State" : "Onln",
"DG" : 5,
"Size" : "3.637 TB",
"Intf" : "SATA",
"Med" : "HDD",
"SED" : "N",
"PI" : "N",
"SeSz" : "512B",
"Model" : "ST4000NM0033-9ZM170",
"Sp" : "U",
"Type" : "-"
}
]
}
}
]
}
Это журнал тестирования RAID-контроллера. И задача звучит так: проверьте все виртуальные диски (их состояние) и каждый диск в каждом виртуальном диске и состояние дисков.
Теперь я даже не могу понять, как получить доступ к элементам верхнего уровня. Перепробовал множество вариантов, но совершенно не понимаю. Один из примеров кода:
#!/usr/bin/perl
use strict;
use warnings;
use JSON::XS;
use File::Slurp;
use Data::Dumper;
my $json_source = "state.json";
my $json = read_file( $json_source ) or die "Couldn't read the file";
my $json_array = decode_json $json or die "Couldn't recognize JSON";
foreach my $item( %$json_array{Controllers} ) {
print Dumper($item->{'Command status'});
}
Был бы очень признателен за помощь в понимании или примерах кода. Как я вижу, пробелы в именах ключей 2-го уровня json могут быть проблемой. И, кроме того, что полностью возвращает decode_json() — ссылка на что? К хэшу, к массиву, к массиву хэшей? Это не может быть так сложно — я видел пример python работы с этим же json — это выглядит очень просто (и это действительно так). Помогите, пожалуйста.
Комментарии:
1. Хорошим первым шагом было бы изменить имя переменной, содержащей hashref, с
$json_array
на что-то лучшее. И выгрузка всего, чтобы вы могли видеть его структуру.2. Вы также захотите ознакомиться с
keys
иeach
. И прочитайте perldoc.perl.org/perldsc
Ответ №1:
Входные данные представляют сложную структуру. Нам нужно извлекать только интересующую информацию.
Этого можно достичь, используя массивы с интересующими полями. Поскольку данные помещаются в массив, мы должны перебирать массивы.
Пожалуйста, изучите следующий код с учетом соответствия вашей задаче.
use strict;
use warnings;
use feature 'say';
use JSON;
my $data = do { local $/; <DATA> };
my $struct = from_json($data);
my @product = ('Product Name','Serial Number','System Time','Controller Time',
'Mfg. Date','FW Package Build','FW Version','BIOS Version',
'Driver Name','Driver Version','Host Interface','Device Interface'
);
my @status = qw/Controller Status Description/;
my @v_fields = ('DG/VD','TYPE','State','Access','Size','Name');
my @p_fields = ('DG','DID','State','Med','Intf','Size','Model');
for my $c ( @{ $struct->{Controllers} } ) {
say '--- Status ' . '-' x 45;
printf "%-12s %sn", $_, $c->{'Command Status'}{$_} for @status;
say '--- Product ' . '-' x 44;
printf "%-18s %sn", $_, $c->{'Response Data'}{$_} for @product;
say '--- Virtual ' . '-' x 60;
say join "t", @v_fields;
for my $vd ( @{ $c->{'Response Data'}{'VD LIST'} } ) {
say join "t", $vd->@{@v_fields};
}
say '--- Physical ' . '-' x 60;
say join "t", @p_fields;
for my $pd ( @{ $c->{'Response Data'}{'PD LIST'} } ) {
say join "t", $pd->@{@p_fields};
}
}
__DATA__
{
"Controllers":[
{
"Command Status" : {
"Controller" : 0,
"Status" : "Success",
"Description" : "None"
},
"Response Data" : {
"Product Name" : "LSI MegaRAID SAS 9260-8i",
"Serial Number" : "SV30408696",
"SAS Address" : " 500605b005c557f0",
"PCI Address" : "00:01:00:00",
"System Time" : "11/02/2020 01:15:01",
"Mfg. Date" : "01/23/13",
"Controller Time" : "11/02/2020 08:03:07",
"FW Package Build" : "12.15.0-0239",
"FW Version" : "2.130.403-4660",
"BIOS Version" : "3.30.02.2_4.16.08.00_0x06060A05",
"Driver Name" : "megaraid_sas",
"Driver Version" : "07.703.05.00-rc1",
"Vendor Id" : 4096,
"Device Id" : 121,
"SubVendor Id" : 4096,
"SubDevice Id" : 37473,
"Host Interface" : "PCI-E",
"Device Interface" : "SAS-6G",
"Bus Number" : 1,
"Device Number" : 0,
"Function Number" : 0,
"Drive Groups" : 6,
"TOPOLOGY" : [
{
"DG" : 0,
"Arr" : "-",
"Row" : "-",
"EID:Slot" : "-",
"DID" : "-",
"Type" : "RAID1",
"State" : "Optl",
"BT" : "N",
"Size" : "465.25 GB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "N",
"TR" : "N"
},
{
"DG" : 0,
"Arr" : 0,
"Row" : "-",
"EID:Slot" : "-",
"DID" : "-",
"Type" : "RAID1",
"State" : "Optl",
"BT" : "N",
"Size" : "465.25 GB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "N",
"TR" : "N"
},
{
"DG" : 0,
"Arr" : 0,
"Row" : 0,
"EID:Slot" : "252:1",
"DID" : 8,
"Type" : "DRIVE",
"State" : "Onln",
"BT" : "N",
"Size" : "465.25 GB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "-",
"TR" : "N"
},
{
"DG" : 0,
"Arr" : 0,
"Row" : 1,
"EID:Slot" : "252:0",
"DID" : 9,
"Type" : "DRIVE",
"State" : "Onln",
"BT" : "N",
"Size" : "465.25 GB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "-",
"TR" : "N"
},
{
"DG" : 1,
"Arr" : "-",
"Row" : "-",
"EID:Slot" : "-",
"DID" : "-",
"Type" : "RAID0",
"State" : "Optl",
"BT" : "N",
"Size" : "3.637 TB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "N",
"TR" : "N"
},
{
"DG" : 1,
"Arr" : 0,
"Row" : "-",
"EID:Slot" : "-",
"DID" : "-",
"Type" : "RAID0",
"State" : "Optl",
"BT" : "N",
"Size" : "3.637 TB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "N",
"TR" : "N"
},
{
"DG" : 1,
"Arr" : 0,
"Row" : 0,
"EID:Slot" : "252:2",
"DID" : 10,
"Type" : "DRIVE",
"State" : "Onln",
"BT" : "N",
"Size" : "3.637 TB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "-",
"TR" : "N"
},
{
"DG" : 2,
"Arr" : "-",
"Row" : "-",
"EID:Slot" : "-",
"DID" : "-",
"Type" : "RAID0",
"State" : "Optl",
"BT" : "N",
"Size" : "3.637 TB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "N",
"TR" : "N"
},
{
"DG" : 2,
"Arr" : 0,
"Row" : "-",
"EID:Slot" : "-",
"DID" : "-",
"Type" : "RAID0",
"State" : "Optl",
"BT" : "N",
"Size" : "3.637 TB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "N",
"TR" : "N"
},
{
"DG" : 2,
"Arr" : 0,
"Row" : 0,
"EID:Slot" : "252:3",
"DID" : 11,
"Type" : "DRIVE",
"State" : "Onln",
"BT" : "N",
"Size" : "3.637 TB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "-",
"TR" : "N"
},
{
"DG" : 3,
"Arr" : "-",
"Row" : "-",
"EID:Slot" : "-",
"DID" : "-",
"Type" : "RAID0",
"State" : "Optl",
"BT" : "N",
"Size" : "3.637 TB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "N",
"TR" : "N"
},
{
"DG" : 3,
"Arr" : 0,
"Row" : "-",
"EID:Slot" : "-",
"DID" : "-",
"Type" : "RAID0",
"State" : "Optl",
"BT" : "N",
"Size" : "3.637 TB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "N",
"TR" : "N"
},
{
"DG" : 3,
"Arr" : 0,
"Row" : 0,
"EID:Slot" : "252:4",
"DID" : 13,
"Type" : "DRIVE",
"State" : "Onln",
"BT" : "N",
"Size" : "3.637 TB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "-",
"TR" : "N"
},
{
"DG" : 4,
"Arr" : "-",
"Row" : "-",
"EID:Slot" : "-",
"DID" : "-",
"Type" : "RAID0",
"State" : "Optl",
"BT" : "N",
"Size" : "3.637 TB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "N",
"TR" : "N"
},
{
"DG" : 4,
"Arr" : 0,
"Row" : "-",
"EID:Slot" : "-",
"DID" : "-",
"Type" : "RAID0",
"State" : "Optl",
"BT" : "N",
"Size" : "3.637 TB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "N",
"TR" : "N"
},
{
"DG" : 4,
"Arr" : 0,
"Row" : 0,
"EID:Slot" : "252:5",
"DID" : 14,
"Type" : "DRIVE",
"State" : "Onln",
"BT" : "N",
"Size" : "3.637 TB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "-",
"TR" : "N"
},
{
"DG" : 5,
"Arr" : "-",
"Row" : "-",
"EID:Slot" : "-",
"DID" : "-",
"Type" : "RAID0",
"State" : "Optl",
"BT" : "N",
"Size" : "3.637 TB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "N",
"TR" : "N"
},
{
"DG" : 5,
"Arr" : 0,
"Row" : "-",
"EID:Slot" : "-",
"DID" : "-",
"Type" : "RAID0",
"State" : "Optl",
"BT" : "N",
"Size" : "3.637 TB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "N",
"TR" : "N"
},
{
"DG" : 5,
"Arr" : 0,
"Row" : 0,
"EID:Slot" : "252:6",
"DID" : 15,
"Type" : "DRIVE",
"State" : "Onln",
"BT" : "N",
"Size" : "3.637 TB",
"PDC" : "dflt",
"PI" : "N",
"SED" : "N",
"DS3" : "none",
"FSpace" : "-",
"TR" : "N"
}
],
"Virtual Drives" : 6,
"VD LIST" : [
{
"DG/VD" : "0/0",
"TYPE" : "RAID1",
"State" : "Optl",
"Access" : "RW",
"Consist" : "Yes",
"Cache" : "RWTD",
"Cac" : "-",
"sCC" : "ON",
"Size" : "465.25 GB",
"Name" : ""
},
{
"DG/VD" : "1/1",
"TYPE" : "RAID0",
"State" : "Optl",
"Access" : "RW",
"Consist" : "Yes",
"Cache" : "RWTD",
"Cac" : "-",
"sCC" : "ON",
"Size" : "3.637 TB",
"Name" : ""
},
{
"DG/VD" : "2/2",
"TYPE" : "RAID0",
"State" : "Optl",
"Access" : "RW",
"Consist" : "Yes",
"Cache" : "RWTD",
"Cac" : "-",
"sCC" : "ON",
"Size" : "3.637 TB",
"Name" : ""
},
{
"DG/VD" : "3/3",
"TYPE" : "RAID0",
"State" : "Optl",
"Access" : "RW",
"Consist" : "Yes",
"Cache" : "RWTD",
"Cac" : "-",
"sCC" : "ON",
"Size" : "3.637 TB",
"Name" : ""
},
{
"DG/VD" : "4/4",
"TYPE" : "RAID0",
"State" : "Optl",
"Access" : "RW",
"Consist" : "Yes",
"Cache" : "RWTD",
"Cac" : "-",
"sCC" : "ON",
"Size" : "3.637 TB",
"Name" : ""
},
{
"DG/VD" : "5/5",
"TYPE" : "RAID0",
"State" : "Optl",
"Access" : "RW",
"Consist" : "Yes",
"Cache" : "RWTD",
"Cac" : "-",
"sCC" : "ON",
"Size" : "3.637 TB",
"Name" : ""
}
],
"Physical Drives" : 7,
"PD LIST" : [
{
"EID:Slt" : "252:0",
"DID" : 9,
"State" : "Onln",
"DG" : 0,
"Size" : "465.25 GB",
"Intf" : "SATA",
"Med" : "HDD",
"SED" : "N",
"PI" : "N",
"SeSz" : "512B",
"Model" : "ST500DM002-1BD142",
"Sp" : "U",
"Type" : "-"
},
{
"EID:Slt" : "252:1",
"DID" : 8,
"State" : "Onln",
"DG" : 0,
"Size" : "465.25 GB",
"Intf" : "SATA",
"Med" : "HDD",
"SED" : "N",
"PI" : "N",
"SeSz" : "512B",
"Model" : "ST500DM002-1BD142",
"Sp" : "U",
"Type" : "-"
},
{
"EID:Slt" : "252:2",
"DID" : 10,
"State" : "Onln",
"DG" : 1,
"Size" : "3.637 TB",
"Intf" : "SATA",
"Med" : "HDD",
"SED" : "N",
"PI" : "N",
"SeSz" : "512B",
"Model" : "ST4000NM0033-9ZM170",
"Sp" : "U",
"Type" : "-"
},
{
"EID:Slt" : "252:3",
"DID" : 11,
"State" : "Onln",
"DG" : 2,
"Size" : "3.637 TB",
"Intf" : "SATA",
"Med" : "HDD",
"SED" : "N",
"PI" : "N",
"SeSz" : "512B",
"Model" : "ST4000NM0033-9ZM170",
"Sp" : "U",
"Type" : "-"
},
{
"EID:Slt" : "252:4",
"DID" : 13,
"State" : "Onln",
"DG" : 3,
"Size" : "3.637 TB",
"Intf" : "SATA",
"Med" : "HDD",
"SED" : "N",
"PI" : "N",
"SeSz" : "512B",
"Model" : "ST4000NM0033-9ZM170",
"Sp" : "U",
"Type" : "-"
},
{
"EID:Slt" : "252:5",
"DID" : 14,
"State" : "Onln",
"DG" : 4,
"Size" : "3.637 TB",
"Intf" : "SATA",
"Med" : "HDD",
"SED" : "N",
"PI" : "N",
"SeSz" : "512B",
"Model" : "ST4000NM0033-9ZM170",
"Sp" : "U",
"Type" : "-"
},
{
"EID:Slt" : "252:6",
"DID" : 15,
"State" : "Onln",
"DG" : 5,
"Size" : "3.637 TB",
"Intf" : "SATA",
"Med" : "HDD",
"SED" : "N",
"PI" : "N",
"SeSz" : "512B",
"Model" : "ST4000NM0033-9ZM170",
"Sp" : "U",
"Type" : "-"
}
]
}
}
]
}
Вывод
--- Status ---------------------------------------------
Controller 0
Status Success
Description None
--- Product --------------------------------------------
Product Name LSI MegaRAID SAS 9260-8i
Serial Number SV30408696
System Time 11/02/2020 01:15:01
Controller Time 11/02/2020 08:03:07
Mfg. Date 01/23/13
FW Package Build 12.15.0-0239
FW Version 2.130.403-4660
BIOS Version 3.30.02.2_4.16.08.00_0x06060A05
Driver Name megaraid_sas
Driver Version 07.703.05.00-rc1
Host Interface PCI-E
Device Interface SAS-6G
--- Virtual ------------------------------------------------------------
DG/VD TYPE State Access Size Name
0/0 RAID1 Optl RW 465.25 GB
1/1 RAID0 Optl RW 3.637 TB
2/2 RAID0 Optl RW 3.637 TB
3/3 RAID0 Optl RW 3.637 TB
4/4 RAID0 Optl RW 3.637 TB
5/5 RAID0 Optl RW 3.637 TB
--- Physical ------------------------------------------------------------
DG DID State Med Intf Size Model
0 9 Onln HDD SATA 465.25 GB ST500DM002-1BD142
0 8 Onln HDD SATA 465.25 GB ST500DM002-1BD142
1 10 Onln HDD SATA 3.637 TB ST4000NM0033-9ZM170
2 11 Onln HDD SATA 3.637 TB ST4000NM0033-9ZM170
3 13 Onln HDD SATA 3.637 TB ST4000NM0033-9ZM170
4 14 Onln HDD SATA 3.637 TB ST4000NM0033-9ZM170
5 15 Onln HDD SATA 3.637 TB ST4000NM0033-9ZM170
Комментарии:
1. Большое вам спасибо! Это работает! Я правильно понимаю? — from_json в этом случае возвращает ссылку на хэш массива хэшей (etc), говоря о контроллерах уровней[0]{‘Статус команды’}.
2. Фигурные скобки указывают на хэш , квадратные скобки указывают на массив . Посмотрите на входные данные JSON — вы получаете hashref на верхнем уровне в
Controllers
качестве ключа, затемControllers
ссылаетесь на массив хэшей. Если вы не уверены, что существует функция ref , которая может определить, с чем вы имеете дело на уровне программы.3. Вы можете получить доступ к данным в следующей форме
say $struct->{Controllers}[0]->{'Command Status'}{Status};
.