Конец строки в позиции 0 означает, что вы передали пустую строку (или undef?). Просто проверьте, пуст ли файл ($_
) и пропустите этот файл.
perl -MJSON::XS -CS -0777ne'
BEGIN { $j = JSON::XS->new->relaxed(1) }
s/^\(//; s/\)\z//;
if (!length($_)) {
warn("Skipping $ARGV: Empty.\n");
next;
}
CORE::say
join ",",
map { join ":", $_->{company}, $_->{time} }
@{ $j->decode($_)->{Companies} };
' *.json
Вы можете сделать еще один шаг и пропустить все файлы, которые вызывают любые ошибки (что позволяет исправить или обработать их вручную):
perl -MJSON::XS -CS -0777ne'
BEGIN { $j = JSON::XS->new->relaxed(1) }
s/^\(//; s/\)\z//;
if (!length($_)) {
warn("Skipping $ARGV: Empty.\n");
next;
}
my $data = eval { $j->decode($_) };
if (!$data) {
warn("Skipping $ARGV: $@");
next;
}
CORE::say
join ",",
map { join ":", $_->{company}, $_->{time} }
@{ $data->{Companies} };
' *.json