在 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 解码的布尔值的主要内容,如果未能解决你的问题,请参考以下文章
使用 json 包解码指针值后是不是需要添加 nil 检查?
在 perl 中使用 XPath 读取 Mac Plist 布尔值