【问题标题】:Perl: JSON::XS Is it possible to force boolean decoding as 1/0?Perl: JSON::XS 是否可以强制布尔解码为 1/0?
【发布时间】: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 序列化程序或其他序列化程序。

PerlMonks discussion.

【问题讨论】:

  • 你为什么要这样做?这些对象在 Perl 中正确地评估为真和假。
  • 您正在使用 Dumper ,您是否尝试过仅打印 $json-&gt;test_true$json-&gt;test_false ?它们被正确地字符串化为 10
  • @ChatterOne 将是 $json-&gt;{test_true}$json-&gt;{test_false}$json 只是一个哈希,你不能在上面调用方法。
  • 我建议您改用Cpanel::JSON::XS,它兼容(除了JSON::XS 中的错误已修复)并且各方面都更好。
  • @Borodin 是的,在大多数情况下您不必关心,但在某些情况下您只需要普通值而不需要对象(例如,传递给另一个不需要对象的序列化程序)

标签: json perl boolean decoding


【解决方案1】:

没有。价值观是祝福的对象。它们只能具有 JSON::XS::Boolean 中允许的值。

【讨论】:

    猜你喜欢
    • 2015-09-02
    • 1970-01-01
    • 2013-07-03
    • 2011-10-11
    • 2021-09-11
    • 2016-01-06
    • 2019-05-24
    • 2017-12-11
    • 1970-01-01
    相关资源
    最近更新 更多