cli*_*nm9 3 perl json data-dumper
perl version 5.18
我遇到了perl JSON编码器的问题,并在浮点数周围加上引号.
看示例代码:
use JSON;
use Data::Dumper;
my $float = 1.2;
my $t = {
float => $float
};
my $json1 = encode_json($t);
print Dumper $t;
my $json2 = encode_json($t);
print $json1 . "\n";
print $json2 . "\n";
Run Code Online (Sandbox Code Playgroud)
输出:
$VAR1 = {
'float' => '1.2',
'integer' => 1
};
{"float":1.2,"integer":1}
{"float":"1.2","integer":1}
Run Code Online (Sandbox Code Playgroud)
正如您在使用Dumper后看到的那样,JSON编码器会添加引号.有什么想法会发生这种情况吗?
不在上面的示例代码中,但在生产中,除非我添加.01,否则我无法删除引号.即使*=*1也不起作用.
由于perl处理变量的方式,这是一种"预期的"奇怪行为(在旧版本的perl中).每个变量可以具有数字和字符串表示,其可以同时存储在存储器中.在大多数情况下,perl将根据上下文使用适当的表示.
分配$t浮点值时,仅存储数字表示.这就是首先encode_json表现如预期的原因.然后转储变量创建字符串表示,该表示也存储在内存中.它不会删除数字表示,但在第二次调用encode_json时无法分辨使用哪个表示并采用字符串.
perl 5.18现在已经5年了,这个行为在perl的新版本中得到了修复,所以我的建议是使用最新版本.
有关详细讨论,请参阅https://www.perlmonks.org/?node_id=909619.
| 归档时间: |
|
| 查看次数: |
124 次 |
| 最近记录: |