如果JSON包含$myid,那么(Perl)
我正在尝试循环使用JSON:如果JSON包含$myid,那么(Perl),json,perl,Json,Perl,我正在尝试循环使用JSON: my $cards = $json_obj->decode( $jsoncards->content ); foreach my $card ( @$cards ) { print Dumper $card->{idMembers}; if ( $card->{idMembers} =~ $myid )
my $cards = $json_obj->decode( $jsoncards->content );
foreach my $card ( @$cards )
{
print Dumper $card->{idMembers};
if ( $card->{idMembers} =~ $myid )
{
print $card->{name} . "\n";
}
}
打印转储程序$card->{idMembers}的输出;是:
$VAR1 = [
'50e442a195105cde670743e4',
'50fd66804825017002070285',
'50f71f02a30d2a8c0d07d10d'
];
如何与这些ID进行比较?绑定操作符
=~
将其LH视为字符串,将RHS视为模式。arrayref的字符串化看起来像数组(0x12ABF14)
,因此这没有什么用处
我们有两种可能将$myid
与阵列的每个成员匹配:
grep EXPR,LIST
builtin。选择表达式返回真值的所有元素。如果返回项目的计数为≥ 1,则找到了匹配的元素
if ( grep $myid eq $_, @{ $card->{idMembers} }) { do stuff }
# or: grep /\Q$myid/, ... if you don't want string equality
~
:
这需要遵守多个注意事项:(1)它仅在v10.1之后可用。因此,使用smartmatch的代码至少应使用5.010001
。(2) Smartmatch在最新版本的perl中被重新标记为实验性的,并且可能会在没有太多通知的情况下更改。(3) 如果idMembers
条目不是数组,smartmatch可能会隐藏错误
Smartmatch取决于两个操作数的类型。如果要选择包含$myid
的所有条目作为子字符串,则可能应将其作为正则表达式对象传递:qr/\Q$myid/~~…
。否则,它可能会检验平等性if ( $myid ~~ $card->{idMembers} ) { do stuff }