2017-02-14 60 views
1

我想知道是否有更简单的方法来完成此操作。我有两个(JSON)对象,它们的属性是IP列表(属性是单个IP​​)。我正在比较两个对象属性以查找任何匹配的项目,并希望从第一个对象中删除任何匹配项($JSONConverted)。我相信我可以使用删除功能(我还没有工作)。我真的很想知道是否有一个更简单的方法来完成这一点。比较对象查找匹配并从第一个对象中找到删除

$JSONConverted = Get-Content -Raw -Path Output.json | ConvertFrom-Json 
$FWJSONConverted = Get-Content -Raw -Path FWOutput.json | ConvertFrom-Json 

$MatchingIPs = Compare-Object -IncludeEqual -ExcludeDifferent -ReferenceObject $FWJSONConverted.data.value -DifferenceObject $JSONConverted.data.value 

$ListOfMatchingIPs = $MatchingIPs.InputObject 

$JSONConverted.data.value | ForEach-Object { 
    foreach ($IP in $ListOfMatchingIPs) { 
     if ($_ -eq $IP) { 
      $JSONConverted.remove.($_) 
     } 
    } 
} 

这里的$JSONConverted数据的例子:

{ 
    "number_of_elements": 1134, 
    "timeout_type": "LAST", 
    "name": "IP List", 
    "data": [ 
    { 
     "last_seen": 1486571563476, 
     "source": "WORD: WORDS", 
     "value": "10.10.10.10", 
     "first_seen": 1486397213696 
    }, 
    { 
     "last_seen": 1486736205285, 
     "source": "WORD: WORDS", 
     "value": "10.17.24.22", 
     "first_seen": 1486397813280 
    }, 
    { 
     "last_seen": 1486637743793, 
     "source": "WORD: WORDS", 
     "value": "10.11.10.10", 
     "first_seen": 1486398713056 
    } 
    ], 
    "creation_time": 1486394698941, 
    "time_to_live": "1 years 0 mons 3 days 0 hours 0 mins 0.00 secs", 
    "element_type":"IP" 
} 
+0

待办事项我想知道为什么在扩展名为.xml的文件中有JSON代码? –

+0

修正了它。至于我的知识,延伸对我一直在努力完成的事情没有任何影响。 – MrMr

+0

从技术上讲,它没有区别。尽管如此,由于Windows通过扩展使用不匹配的扩展名来关联文件处理程序是相当sl。的。这就是说,你的输入数据实际上是什么样的?另外,我怀疑'$ JSONConverted.remove。($ _)'实际上会删除任何内容。 –

回答

1

像这样的东西应该足够了(假设你想从data阵列删除整个子对象):

$JSONConverted.data = $JSONConverted.data | Where-Object { 
    @($FWJSONConverted.data.value) -notcontains $_.value 
} 
+0

这似乎没有奏效。当我再次检查$ jsonconverted.data.value时,已知的匹配IP仍然存在。我试图从原始$ jsonconverted对象中删除整个对象(子对象?)。我应该补充说,$ jsonconverted对象和$ FWJSONConverted对象是不一样的。 – MrMr

+0

@MrMr当我使用您的示例数据对其进行测试时,它工作正常。请提供证据。另外,你使用的是什么PowerShell版本? –

+0

我很抱歉,看起来我错过了$ _后的.value。这很好,非常感谢。你有什么机会可以帮助我理解@()部分?我了解一般情况,但为什么@()会起作用? – MrMr

相关问题