在Perl中使用JSON在客户端和服务器之间传递BigFloat

时间:2014-06-25 18:18:12

标签: json perl floating-point

我在客户端和服务器之间传输货币值,我使用Math::BigFloat(在Perl中)来维护值的精确度。我的问题是,在客户端和服务器之间进行通信时,我正在使用JSON,并且在Perl中使用from_jsonto_json快捷方式时出现错误。

错误说我没有启用allow_blessed或convert_blessed。有没有办法在仍然使用from_json和to_json快捷方式时启用这些,而不必使用OO接口($json = JSON->new->allow_nonref;

更一般地说,处理高精度数字类型的服务器和客户端之间的JSON通信的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

最简单的事情可能是对数字进行字符串化,然后将其转换回另一方的Math :: BigFloat。

例如:

package Client;

use strict;
use warnings;

use Math::BigFloat;
use JSON qw(to_json);

my $pi = Math::BigFloat->bpi(1000);

my $json = to_json { pi => $pi->bstr };

say $json;

然后:

package Server;

use strict;
use warnings;

use Math::BigFloat;
use JSON qw(from_json);

my $json = '{ "pi":"3.14159" }';
my $hashref = from_json($json);
my $pi = Math::BigFloat->new($hashref->{pi});

say $pi;