разбор JSON от PERL - PullRequest
       1

разбор JSON от PERL

0 голосов
/ 22 января 2019

Я получаю ответ от сервера в формате json.Я разлагаю его с помощью Data :: Dumper, давая

$VAR1 = {
  'StatementsResponse' => {
    'ResponceRef' => '',
    'statements' => [
      {
        'J0115AOU3H' => {
          'BPL_DAT_KL' => '10.01.2019',
          'AUT_MY' => '10'
        }
      },
      {
        'J0115A47J7' => {
          'AUT_MY' => '11',
          'BPL_DAT_KL' => '11.01.2019'
        }
      },
      {
        'J0115AVR8L' => {
          'BPL_DAT_KL' => '12.01.2019',
          'AUT_MY' => '12'
        }
      },
      {
        'J0115AVBGS' => {
          'AUT_MY' => '13',
          'BPL_DAT_KL' => '13.01.2019'
        }
      }
    ]
  }
};

Как получить значения BPL_DAT_KL и AUT_MY, при условии, что J0115AOU3H является динамическим значением, которое постоянно изменяется и не изменяетсяизвестно на момент выхода?Если я знаю значение, то я могу получить значения с помощью приведенного ниже кода, но что, если я его не знаю?

use JSON;
use JSON::XS;
my $json = `cat /home/json.log`;
my $data=decode_json($json);

use Data::Dumper;
print Dumper($data);

my $aref = $data->{'StatementsResponse'}->{'statements'};
for my $element (@$aref) {
    print $element->{J0115AOU3H}->{BPL_SUM_E};
}

1 Ответ

0 голосов
/ 22 января 2019
my $statements = $data->{StatementsResponse}{statements};
for my $statement (@$statements) {
    for my $statement_id (keys(%$statement)) {
        my $statement_data = $statement->{$statement_id};
        say $statement_data->{BPL_SUM_E};
    }
}

Если мы можем полагаться на хэши, имеющие только один элемент, у вас очень странный формат, и приведенное выше можно упростить до следующего:

my $statements = $data->{StatementsResponse}{statements};
for my $statement (@$statements) {
    my ($statement_id) = keys(%$statement);
    my $statement_data = $statement->{$statement_id};
    say $statement_data->{BPL_SUM_E};
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...