当我使用漂亮的打印版本时,为什么会出现此错误?
'“'预期,在./perl.pl第29行的字符偏移2(在字符串结尾之前)”。
#!/usr/bin/env perl
use warnings;
use 5.014;
use utf8;
binmode STDOUT, ':encoding(utf-8)';
use Data::Dumper;
use JSON;
my $json = JSON->new->utf8;
my $hashref = {
'muster, hanß' => {
'hello' => {
year => 2000,
color => 'green'
}
}
};
my $utf8_encoded_json_text = $json->pretty->encode( $hashref ); # leads to a die
#my $utf8_encoded_json_text = $json->encode( $hashref ); # works
open my $fh, '>', 'testfile.json' or die $!;
print $fh $utf8_encoded_json_text;
close $fh;
open $fh, '<', 'testfile.json' or die $!;
$utf8_encoded_json_text = readline $fh;
close $fh;
$hashref = decode_json( $utf8_encoded_json_text );
say Dumper $hashref;
答案 0 :(得分:7)
因为当您重读文件时,您正在使用readline
,并且只读取文件的第一行。当Pretty关闭时,整个输出都在一行上。当启用Pretty时,JSON会分散在多行上,因此您将无效的截断JSON传递给decode_json
。
使用local $/ = undef;
或slurp或其他任何内容阅读整个内容。