JSON: умирает при декодировании при создании файла с красивой печатью - PullRequest
1 голос
/ 06 декабря 2011

Почему я получаю эту ошибку, когда использую симпатичную версию для печати?

'' 'ожидается, со смещением символа 2 (перед "(конец строки)") в ./perl.пл строка 29.

#!/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 Ответ

7 голосов
/ 06 декабря 2011

Потому что, когда вы читаете файл обратно, вы используете readline и читаете только первую строку файла.Когда довольно выключен, весь вывод находится в одной строке.Когда функция Pretty включена, JSON распределен по нескольким строкам, поэтому вы передаете недопустимый усеченный JSON в decode_json.

Считайте весь контент, используя local $/ = undef; или slurp или что угодно еще.

...