How to exclude non-valued object properties when converting to JSON in Powershell

Something like this?

$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
}

Result:

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

beatcracker's helpful answer offers an effective solution; let me complement it with a streamlined version that takes advantage of PSv4+ features:

# Sample input object
$object = [pscustomobject] @{
  TableName = 'MyTable'
  Description = 'Lorem ipsum dolor...'
  AppArea = 'UserMgmt'
  InitialVersionCode = $null
}

# Start with the list of candidate properties.
# For simplicity we target *all* properties of input object $obj
# but you could start with an explicit list as wellL
#   $candidateProps = 'TableName', 'Description', 'AppArea', 'InitialVersionCode'
$candidateProps = $object.psobject.properties.Name

# Create the filtered list of those properties whose value is non-$null
# The .Where() method is a PSv4+ feature.
$nonNullProps = $candidateProps.Where({ $null -ne $object.$_ })

# Extract the list of non-null properties directly from the input object
# and convert to JSON.
$object | Select-Object $nonNullProps | ConvertTo-Json

I have the following function in my profile for this purpose. Advantage: I can pipe a collection of objects to it and remove nulls from all the objects on the pipeline.

Function Remove-Null {
    [cmdletbinding()]
    param(
        # Object to remove null values from
        [parameter(ValueFromPipeline,Mandatory)]
        [object[]]$InputObject,
        #By default, remove empty strings (""), specify -LeaveEmptyStrings to leave them.
        [switch]$LeaveEmptyStrings
    )
    process {
        foreach ($obj in $InputObject) {
            $AllProperties = $obj.psobject.properties.Name
            $NonNulls = $AllProperties |
                where-object {$null -ne $obj.$PSItem} |
                where-object {$LeaveEmptyStrings.IsPresent -or -not [string]::IsNullOrEmpty($obj.$PSItem)}
            $obj | Select-Object -Property $NonNulls
        }
    }
}

Some examples of usage:

$AnObject = [pscustomobject]@{
    prop1="data"
    prop2="moredata"
    prop5=3
    propblnk=""
    propnll=$null
}
$AnObject | Remove-Null

prop1 prop2    prop5
----- -----    -----
data  moredata     3

$ObjList =@(
    [PSCustomObject]@{
        notnull = "data"
        more = "sure!"
        done = $null
        another = ""
    },
    [PSCustomObject]@{
        notnull = "data"
        more = $null
        done = $false
        another = $true
    }
)
$objList | Remove-Null | fl #format-list because the default table is misleading

notnull : data
more    : sure!

notnull : data
done    : False
another : True