Как я могу изящно перебрать хеш-ключ-значение, сгенерированный из JSON, содержащий значения, установленные как 'undef' и 'null'?
Я запрашиваю ответ json третьей стороны, и иногда значения полей буквально равны "undef" или "null". Если я попытаюсь распечатать ключ и значение каждого объекта в этом файле json, то при появлении значения undef он выдаст ошибку неинициализированного значения.
Есть ли что-то, что я могу добавить к начальному декодированию $json->, чтобы изменить эти null/undefs на то, что может обрабатывать perl? Или, может быть, он просто исключает пары значений, которые имеют значение null / undef, из $json_text?
my $json_text = $json->decode($content);
foreach my $article(@{$json_text->{data}->{articles}}){
while (my($k, $v) = each ($article)){
print "$k => $v\n";
}
}
3 ответа
$_ // ""
переведу undef
значения в пустую строку,
my $json_text = $json->decode($content);
foreach my $article (@{$json_text->{data}->{articles}}) {
while (my($k, $v) = map { $_ // "" } each %$article) {
print "$k => $v\n";
}
}
Так как вы используете версию Perl, которая позволяет each
Для применения к хеш- ссылке вы также можете использовать оператор //
,
Выражение как a // b
оценивает a
если a
определяется, в противном случае b
,
Вы можете использовать это так.
my $json_text = $json->decode($content);
for my $article (@{$json_text->{data}{articles}}) {
while (my ($k, $v) = each $article) {
printf "%s => %s\n", $k, $v // 'null';
}
}
Пытаться printf "%s => %s\n", $k || "empty", $v || "empty";
или даже
$k ||= "empty";
$v ||= "empty";
print "$k => $v\n";