Public/ConvertTo-NullableJsonArray.ps1

Function ConvertTo-NullableJsonArray {
    <#
        .Synopsis
            Convert an object or array to a JSON array string, or return $null if empty.
        .Example
            @('a','b') | ConvertTo-NullableJsonArray
            # Returns: '["a","b"]'
        .Example
            $null | ConvertTo-NullableJsonArray
            # Returns: $null
    #>

    [CmdletBinding(DefaultParameterSetName = 'Object')]
    [OutputType([string])]
    param (
        [Parameter(Mandatory = $false, ValueFromPipeline = $true, Position = 0, ParameterSetName = 'Object')]
        [AllowEmptyCollection()]
        [AllowEmptyString()]
        [AllowNull()]
        [Object]$Object,

        [Parameter(Mandatory = $false, ValueFromPipeline = $true, Position = 0, ParameterSetName = 'Variable')]
        [AllowEmptyCollection()]
        [AllowEmptyString()]
        [AllowNull()]
        [String]$Variable
    )
    Begin {}
    End {}
    Process {
        if ($PsCmdlet.ParameterSetName -eq 'Variable') {
            $Object = Get-Variable -Name $Variable -ValueOnly -ErrorAction SilentlyContinue
        }
        if ($Object -is [array] -and $Object.Count -gt 1) {
            ConvertTo-Json $Object
        } elseif ($Object) {
            ConvertTo-Json (@() + ($Object))
        } else {
            $null
        }
    }
}