2013-12-11 133 views
0

我正在生成Json字符串,它不会生成良好的Json。对我来说,它看起来很好,但我有一个错误somwhere。我找不到它在哪里以及如何删除它。 这里是整个来源(因为它很短)。生成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

' '{ “名称”: “'。$名字。 '” ......''好写为'Q({ “名”: “$名” ...)' – TLP

+0

@TLP ... 'qq({“name”:“$ name”,...})'为了'$ name'插入(不仅仅是'q(...)')。 – amon

+0

@amon当然,我在那里脑残。尽管我现在要说的是使用Quentin的解决方案。 – TLP

回答

-1

您必须chomp您的输入,以从$name$age变量删除所有尾随换行,用他们进入你的JSON之前。我的意思是:

my $name = <>; 
chomp $name; 

my $age = <>; 
chomp $age; 

这些换行符是你错误的原因。

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 }); 
}