1

サード パーティの json 応答を取得していますが、フィールドの値が文字通り「undef」または「null」になることがあります。この json 内の各オブジェクトのキーと値を出力しようとすると、undef 値がある場合は常に、値が初期化されていないというエラーがスローされます。

これらの null/undefs を perl が処理できるものに変更するために、最初の $json->decode に追加できるものはありますか? それとも、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 を実行しているため、定義済みまたは演算子も使用できます。//

のような式は、 ifが定義されている場合、そうでない場合a // bに評価されます。aab

こんな感じで使えます。

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 に答える