2017-02-14 13 views
1

もっと簡単な方法があるのだろうかと思います。私は2つの(JSON)オブジェクトを持っています。そこにはIPのリスト(プロパティは個々のIPです)のプロパティがあります。 2つのオブジェクトのプロパティを比較して一致するアイテムを見つけ、最初のオブジェクト($JSONConverted)から一致するものをすべて削除します。私は(私はまだ働いていない)削除機能を使用することができると信じています。私は本当にこれを達成するためのより簡単な方法があるのだろうかと思っています。ここでCompare-Object一致を見つけて最初のオブジェクトから見つかった削除を削除

$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は、不一致の拡張子を使用して拡張子を使用してファイルハンドラを関連付けるので、ややこしいです。それで、入力データは実際にどのように見えますか?また、 '$ JSONConverted.remove。($ _)'が実際に何かを削除するのではないかと疑います。 –

答えて

1

何かが(あなたがdata配列から全体の子オブジェクトを削除すると仮定した場合)で十分です:

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

これはうまくいきませんでした。私が$ jsonconvertted.data.valueを再度チェックするとき、既知の一致するIPはまだそこに存在しています。元の$ jsonconvertedオブジェクトからオブジェクト全体(子オブジェクト?)を削除しようとしています。おそらく、$ jsonconvertedオブジェクトと$ FWJSONConvertedオブジェクトが同じではないということを追加するべきです。 – MrMr

+0

@ MrMrあなたのサンプルデータでテストしたところ、うまくいきました。証拠を提示してください。また、PowerShellのどのバージョンを使用していますか? –

+0

私はお詫びします。$ _の後に.valueが欠けているようです。これは素晴らしい作品です、ありがとうございました。私が@()部分を理解する手助けをする瞬間はありますか?私は一般的に何が起こっているのか理解していますが、@()はなぜ機能しますか? – MrMr

関連する問題