我有一个像这样严格的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在这个例子中不起作用。如果我能得到对象的索引(理想情况下没有计数器),我想我可以删除正确的对象。
答案 0 :(得分:7)
grep
is your friend在这里。它在现有列表中创建一个与表达式匹配的新元素列表。
my @filtered = grep { $_->{ip} ne '1.2.3.4' } @$jsn;