JSON:在创建具有漂亮打印的文件时死于解码

时间:2011-12-06 16:50:33

标签: json perl pretty-print

当我使用漂亮的打印版本时,为什么会出现此错误?

  

'“'预期,在./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;

1 个答案:

答案 0 :(得分:7)

因为当您重读文件时,您正在使用readline,并且只读取文件的第一行。当Pretty关闭时,整个输出都在一行上。当启用Pretty时,JSON会分散在多行上,因此您将无效的截断JSON传递给decode_json

使用local $/ = undef;slurp或其他任何内容阅读整个内容。