1

我正在提取第三方的 json 响应,有时字段的值实际上是“undef”或“null”。如果我尝试打印此 json 中每个对象的键和值,只要有 undef 值,它就会抛出未初始化的值错误。

有什么我可以添加到初始 $json->decode 以将那些 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";
      }
}
4

3 回答 3

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";
      }
}
于 2013-06-02T19:55:17.330 回答
2

由于您正在运行允许each应用于哈希引用的 Perl 版本,因此您也可以使用定义或运算符//

表达式 likea // b求值为aifa已定义,否则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';
  }
}
于 2013-06-03T00:43:17.360 回答
0

尝试printf "%s => %s\n", $k || "empty", $v || "empty";

甚至

$k ||= "empty";
$v ||= "empty";
print "$k => $v\n";
于 2013-06-02T15:57:24.737 回答