生成json以解析错误

Sta*_*ovv 0 perl json

我正在生成一个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);
Run Code Online (Sandbox Code Playgroud)

Que*_*tin 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 });
}
Run Code Online (Sandbox Code Playgroud)