如何从Perl中的数组中删除对象

时间:2016-09-14 14:59:48

标签: json perl

我有一个像这样严格的JSON字符串: [{"ip":"", "comment":""}, {"ip":"", "comment":""}]

我正试图找出如何通过IP和/或注释键中的标识删除其中一个对象。

我到目前为止最接近的是:

my $jsn = decode_json('[{"ip":"1.2.3.4", "comment":"one"}, {"ip":"10.10.10.10","comment":"two"}]');

foreach(@{$jsn}){
        if($_->{ip} eq '1.2.3.4'){
                print "Found!";
                splice @{$jsn}, $_, 1;
        }
}

我知道splice在这个例子中不起作用。如果我能得到对象的索引(理想情况下没有计数器),我想我可以删除正确的对象。

1 个答案:

答案 0 :(得分:7)

grep is your friend在这里。它在现有列表中创建一个与表达式匹配的新元素列表。

my @filtered = grep { $_->{ip} ne '1.2.3.4' } @$jsn;