Perl:JSON::XS 是否可以强制将布尔值解码为 1/0?

Perl: JSON::XS Is it possible to force boolean decoding as 1/0?

包 JSON::XS 使用 JSON::XS:: 布尔对象来表示 true/false。是否可以强制将 true/false 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 序列化程序或其他序列化程序进行序列化。

PerlMonks discussion.

没有。这些值是受祝福的对象。它们只能具有 JSON::XS::Boolean.

中允许的值

对于 Cpanel::JSON::XS,unblessed_bool 选项控制它。因此,您可以使用以下内容:

use Cpanel::JSON::XS qw( );

my $j = Cpanel::JSON::XS->new->utf8->unblessed_bool;

my $data = $j->decode( $json );

JSON::XS(目前)没有等效的选项。您将不得不遍历数据返回结构并修复它。