【发布时间】:2017-11-13 12:59:56
【问题描述】:
JSON::XS 包使用 JSON::XS::Boolean 对象来表示真/假。是否可以强制将真/假 json 值解码为 1/0 Perl 数字?
#!/usr/bin/env perl
use JSON::XS;
use Data::Dumper;
my $json = decode_json(join('', <DATA>));
print Dumper $json;
__DATA__
{
"test_true": true,
"test_false": false
}
输出:
$VAR1 = {
'test_true' => bless( do{\(my $o = 1)}, 'JSON::XS::Boolean' ),
'test_false' => bless( do{\(my $o = 0)}, 'JSON::XS::Boolean' )
};
decode_json 之后我想要这样的东西:
$VAR1 = {
'test_true' => 1,
'test_false' => 0
};
原因:在某些情况下,很难预测 JSON::XS::Boolean 将如何被序列化,例如 SOAP 序列化程序或其他序列化程序。
【问题讨论】:
-
你为什么要这样做?这些对象在 Perl 中正确地评估为真和假。
-
您正在使用
Dumper,您是否尝试过仅打印$json->test_true和$json->test_false?它们被正确地字符串化为1和0 -
@ChatterOne 将是
$json->{test_true}和$json->{test_false}。$json只是一个哈希,你不能在上面调用方法。 -
我建议您改用
Cpanel::JSON::XS,它兼容(除了JSON::XS中的错误已修复)并且各方面都更好。 -
@Borodin 是的,在大多数情况下您不必关心,但在某些情况下您只需要普通值而不需要对象(例如,传递给另一个不需要对象的序列化程序)
标签: json perl boolean decoding