我正在生成一个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);
答案 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}}
这些换行是导致错误的原因。