2016-09-14 57 views
0

删除对象我有一个JSON字符串strcutred像这样: [{"ip":"", "comment":""}, {"ip":"", "comment":""}]如何从一个数组在Perl

我试图找出如何通过识别从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; 
     } 
} 

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

回答

6

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

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

写回到同一阵列工作为好,如果一个人并不需要/想创建一个新的:'@ $ JSN = grep的{...} @ $ JSN;' – stevieb

+0

这正是我在找什么。我知道Perl可以做这样的事情,整洁和单线风格:) –