生成json以解析错误

时间:2013-12-11 13:05:05

标签: json perl

我正在生成一个Json字符串,它不能生成好的Json。看起来对我来说 很好,但我有一个错误。我找不到它的位置以及如何删除它。 这是整个来源(因为它非常短)。

use strict;
use warnings;
use JSON qw( decode_json );

sub getJsonStr{
    print "Enter the name of the person: ";
    my $name = <>;
    print "Enter the age of the person: ";
    my $age = <>;
    my $json = '{
            "name" :"'.$name.'",
            "age"  :"'.$age.'"
           }';
}

my $jsonStr = getJsonStr();

print $jsonStr;

my $jobj = decode_json($jsonStr);

2 个答案:

答案 0 :(得分:8)

您的问题是由于没有转义具有特殊含义或JSON字符串中不允许的输入字符引起的。

您用于输入数据的方法保证在其末尾有一个新的行字符。大概你不想那样,所以你应该删除它(使用chomp)而不是转义。

但这并不能阻止用户输入具有特殊含义的其他字符。如果要生成JSON,那么使用JSON库,不要只是将字符串混合在一起。你已经在使用JSON.pm了,所以从中获取编码器以及解码器。

sub getJsonStr {
    print "Enter the name of the person: ";
    my $name = <>;
    chomp $name;
    print "Enter the age of the person: ";
    my $age = <>;
    chomp $age;
    my $json = encode_json({ name => $name, age => $age });
}

答案 1 :(得分:-1)

在将$name$age变量用于JSON之前,您必须chomp输入以删除my $name = <>; chomp $name; my $age = <>; chomp $age; 和{{1}}变量中的所有尾随换行符。我的意思是:

{{1}}

这些换行是导致错误的原因。