为什么JSON模块会引用一些数字而不引用其他数字?

Tha*_*ama 3 perl json

我们最近切换到新的JSON2 perl模块.我认为现在所有的一切都被引用了.但我遇到了一些情况,其中一个数字(250)作为由perl创建的json字符串中的未引用数字返回.

出于好奇: 有谁知道为什么会出现这种情况以及json模块如何决定是否引用一个值?

hob*_*bbs 8

如果它是一个数字,它将是不加引号的.如果没有深入到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".