gpt4 book ai didi

json - Perl Json 编码有 float 的引号

转载 作者:行者123 更新时间:2023-12-01 11:15:52 25 4
gpt4 key购买 nike

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";

输出:
$VAR1 = {
'float' => '1.2',
'integer' => 1
};
{"float":1.2,"integer":1}
{"float":"1.2","integer":1}

正如您在使用 Dumper 后所见,JSON 编码器添加了引号。任何想法为什么会发生这种情况?

不在上面的示例代码中,但在生产中,除非添加 .01,否则我无法删除引号。即使 *= *1 也不起作用。

最佳答案

由于 perl 处理变量的方式,这是一种“预期的”奇怪行为(在旧版本的 perl 中)。每个变量都可以有数字和字符串表示,它们可以同时存储在内存中。在大多数情况下,perl 将根据上下文使用适当的表示。

当您分配 $t一个浮点值,只存储数字表示。这就是为什么首先encode_json行为符合预期。然后转储变量创建字符串表示,它也存储在内存中。它不会删除数字表示,而是在第二次调用 encode_json 中无法分辨使用哪种表示形式并采用字符串。

perl 5.18 现在已经 5 年了,这个行为在 perl 的较新版本中得到了修复,所以我的建议是使用最新版本。

https://www.perlmonks.org/?node_id=909619进行详细讨论。

关于json - Perl Json 编码有 float 的引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51430448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com