2017-11-13 20 views
3

パッケージJSON :: XSはJSON :: XS :: Booleanオブジェクトを使用してtrue/falseを表します。 true/false json値を1/0 Perl数としてデコードすることは強制できますか?Perl:JSON :: XSブール値のデコードを1/0として強制できますか?

#!/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 ::ブールます例えば、SOAPシリアライザなどでシリアライズすることができます。

PerlMonks discussion

+3

なぜそれをしたいですか?これらのオブジェクトはPerl内で真と偽と正しく評価されます。 – Borodin

+1

あなたは 'Dumper'を使っています。' $ json-> test_true'と '$ json-> test_false'を印刷してみましたか?それらは '$ json - > {test_true}'と '$ json - > {test_false}'となる '1'と' 0' – ChatterOne

+1

@ChatterOneに正しくストリングされます。 '$ json'はちょうどハッシュなので、メソッドを呼び出すことはできません。 – simbabque

答えて

3

いいえ値は祝福されたオブジェクトです。 JSON :: XS :: Booleanで許可される値のみを持つことができます。

関連する問題