如果值有\ n或多于一行,如何解码perl中的json

时间:2015-01-20 12:19:57

标签: json perl

如果值有多行

,如何解码json文件

a.json文件:

{

            "sv1" : {
                  "output" : "Hostname: abcd
                              asdkfasfjsl",
                  "exp_result" : "xyz"
              }
}

当我尝试阅读上面的json文件时,我遇到一个错误“在解析JSON字符串时遇到无效字符,字符偏移量为50(在”\ n ...“之前)”

读取上述json文件的代码:

 #!/volume/perl/bin/perl -w
 use strict;
 use warnings;
 use JSON;

 local $/;
 open(AA,"<a.json") or die "can't open json file : $!\n";
 my $json = <AA>;
 my $data = decode_json($json);
 print "reading output $data->{'sv1'}->{'output'}\n"; 
 print "reading output $data->{'sv1'}->{'exp_result'}\n";
 close AA;

1 个答案:

答案 0 :(得分:1)

除了JSON是否有效(请参阅问题评论)之外,您只阅读文件的第一行。

my $json = <AA>;

这是一个标量变量,只接收一行。

使用数组获取所有行:

my @json = <AA>;
my $json = join "\n", @json;

甚至更好:使用File::Slurp::read_file通过一个简单的命令获取文件的全部内容。

use File::Slurp qw/read_file/;
my $json = read_file( "a.json" );