如果JSON包含$myid,那么(Perl)

如果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 )

我正在尝试循环使用JSON:

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
    
  • 在语义的成员中使用smartmatch运算符
    ~

    这需要遵守多个注意事项:(1)它仅在v10.1之后可用。因此,使用smartmatch的代码至少应
    使用5.010001
    。(2) Smartmatch在最新版本的perl中被重新标记为实验性的,并且可能会在没有太多通知的情况下更改。(3) 如果
    idMembers
    条目不是数组,smartmatch可能会隐藏错误

    Smartmatch取决于两个操作数的类型。如果要选择包含
    $myid
    的所有条目作为子字符串,则可能应将其作为正则表达式对象传递:
    qr/\Q$myid/~~…
    。否则,它可能会检验平等性

  • if ( $myid ~~ $card->{idMembers} ) { do stuff }