我们最近切换到新的JSON2 perl模块.我认为现在所有的一切都被引用了.但我遇到了一些情况,其中一个数字(250
)作为由perl创建的json字符串中的未引用数字返回.
出于好奇: 有谁知道为什么会出现这种情况以及json模块如何决定是否引用一个值?
如果它是一个数字,它将是不加引号的.如果没有深入到Perl内部,如果它是一个文字数字或算术运算的结果,那么它就是一个数字,并且由于它的数值已经产生,所以它没有被字符串化.
use JSON::XS;
my $json = JSON::XS->new->allow_nonref;
say $json->encode(42); # 42
say $json->encode("42"); # "42"
my $x = 4;
say $json->encode($x); # 4
my $y = "There are $x lights!";
say $json->encode($x); # "4"
$x++; # modifies the numeric value of $x
say $json->encode($x); # 5
Run Code Online (Sandbox Code Playgroud)
请注意,打印数字不是"字符串化",即使它生成要输出的数字的字符串表示形式; print $x
不会导致数字成为字符串,但print "$x"
确实如此.
无论如何,所有这些都有点奇怪,但是如果你想在JSON中可靠地取消引用值,那么0 + $value
在编码之前立即将它放入你的结构中,如果你想要它被可靠地引用,那么使用"" . $value
或"$value"
.