在 Perl 中,检查一个 json 解码的布尔值

Posted

技术标签:

【中文标题】在 Perl 中,检查一个 json 解码的布尔值【英文标题】:In Perl, checking a json decoded boolean value 【发布时间】:2011-10-11 03:41:30 【问题描述】:

解码的 JSON 布尔值是对象:

#!/usr/bin/env perl

use strict;
use warnings;

use Data::Dumper;
use JSON;

my $json_string = '"boolean_field":true';
my $decoded_json = from_json $json_string;

print Dumper $decoded_json;

输出:

$VAR1 = 
          'boolean_field' => bless( do\(my $o = 1), 'JSON::XS::Boolean' )
        ;

从JSON.pm documentation我知道了以下三种方法:

JSON::is_bool JSON::true JSON::假

但是,出于某种愚蠢的原因,我不知道如何确定$decoded_json 中“boolean_field”的值是真还是假。

(对不起,这个非常基本的问题;它让我发疯了!)

【问题讨论】:

部分混乱可能来自 Perl 本身 - Perl 在语言中没有布尔类型。它只有真实性。在为项目选择语言时,这是需要考虑的一件事,尤其是对于 JSON API 的使用者。 【参考方案1】:

这将是 Perl 中的真实值。正常访问即可。

print 'true' if $decoded_json->'boolean_field';

【讨论】:

为了对此进行扩展,JSON 布尔对象使用重载来为true 返回1,为false 返回0。需要这些对象的唯一原因是,如果需要,您可以区分布尔值和实际 0 或 1。 谢谢!经过调查,我之前在开发代码中正常访问它,但另一个问题掩盖了正确的行为,这导致我尝试各种奇怪的方法(doh!) @Quentin ,我有一个验证子,我需要像这样检查 $boolean='true'; if( $decoded_json->'boolean_field' eq $boolean ) # pass .此条件失败,因为 $decoded_json->'boolean_field' 返回 1。如何评估它是否包含字符串 'true' ? @Subhash — 如果您有新问题,那么 you can ask one 如果上下文有用,请参考此问题。

以上是关于在 Perl 中,检查一个 json 解码的布尔值的主要内容,如果未能解决你的问题,请参考以下文章

Php json将所有值解码为字符串

使用 json 包解码指针值后是不是需要添加 nil 检查?

golang json 编码解码

在 perl 中使用 XPath 读取 Mac Plist 布尔值

使用 Swift 4 Decodable 将字符串 JSON 响应转换为布尔值

Swift 4 Xcode 使用 JSON 解码的问题