2015-10-09 9 views
5

'da JSON'a dönüştürürken değerlenmeyen nesne özellikleri nasıl hariç tutulur? Çalıştığım bir kod parçam var ancak bunu yapmanın daha iyi bir yolu olup olmadığını öğrenmek istiyorum. Şimdiye kadar ilgili hiçbir şey bulamadım. Gerçekler:Powershell

  • N özellikli bir nesnem var.
  • Bu nesneyi (ConvertTo-Json) kullanarak JSON'a dönüştürmek istiyorum.
  • Değerlenmeyen nesne özelliklerine JSON eklemek istemiyorum.

(gerçekten önemli değil) nesne oluşturma:

$object = New-Object PSObject 
Add-Member -InputObject $object -MemberType NoteProperty -Name TableName -Value "MyTable" 
Add-Member -InputObject $object -MemberType NoteProperty -Name Description -Value "Lorem ipsum dolor.." 
Add-Member -InputObject $object -MemberType NoteProperty -Name AppArea -Value "UserMgmt" 
Add-Member -InputObject $object -MemberType NoteProperty -Name InitialVersionCode -Value "" 

Ben iyileştirme gerektiren hattı (non-değerli özelliklere filtrelemek ve JSON bunları içermez için)

# So I want to 'keep' and deliver to the JSON only the properties that are valued (first 3). 
$object | select -Property TableName, Description, AppArea, InitialVersion | ConvertTo-Json 

bu hat sunar Ne:

$JSON = New-Object PSObject 

if ($object.TableName){ 
    Add-Member -InputObject $JSON -MemberType NoteProperty -Name TableName -Value $object.TableName 
} 

if ($object.Description){ 
    Add-Member -InputObject $JSON -MemberType NoteProperty -Name Description -Value $object.Description 
} 

if ($object.AppArea){ 
    Add-Member -InputObject $JSON -MemberType NoteProperty -Name AppArea -Value $object.AppArea 
} 

if ($object.InitialVersionCode){ 
    Add-Member -InputObject $JSON -MemberType NoteProperty -Name InitialVersionCode -Value $object.InitialVersionCode 
} 

$JSON | ConvertTo-Json 

cevap

7
: Denedim ve çalışır, ancak ben işlemek için çok daha özelliklere sahip çünkü bunu sevmiyorum ettik ne

Results: 
{ 
    "TableName": "MyTable", 
    "Description": "Lorem ipsum dolor..", 
    "AppArea": "UserMgmt", 
    "InitialVersion": null 
} 

What I want to obtain: 
{ 
    "TableName": "MyTable", 
    "Description": "Lorem ipsum dolor..", 
    "AppArea": "UserMgmt" 
} 

Böyle bir şey mi var?

$object = New-Object PSObject 

Add-Member -InputObject $object -MemberType NoteProperty -Name TableName -Value "MyTable" 
Add-Member -InputObject $object -MemberType NoteProperty -Name Description -Value "Lorem ipsum dolor.." 
Add-Member -InputObject $object -MemberType NoteProperty -Name AppArea -Value "UserMgmt" 
Add-Member -InputObject $object -MemberType NoteProperty -Name InitialVersionCode -Value "" 

# Iterate over objects 
$object | ForEach-Object { 
    # Get array of names of object properties that can be cast to boolean TRUE 
    # PSObject.Properties - https://msdn.microsoft.com/en-us/library/system.management.automation.psobject.properties.aspx 
    $NonEmptyProperties = $_.psobject.Properties | Where-Object {$_.Value} | Select-Object -ExpandProperty Name 

    # Convert object to JSON with only non-empty properties 
    $_ | Select-Object -Property $NonEmptyProperties | ConvertTo-Json 
} 

Sonuç:

{ 
    "TableName": "MyTable", 
    "Description": "Lorem ipsum dolor..", 
    "AppArea": "UserMgmt" 
} 
+0

Evet, bu işe görünmektedir ve temiz. Teşekkürler! –