2015-10-15 10 views
8

Sto creando un JSON in PowerShell e voglio impostare una larghezza di tabulazione personalizzata al momento della sua costruzione (invece dei 4 spazi bianchi predefiniti voglio impostare solo 2 spazi bianchi) .Come modificare la larghezza della tabulazione durante la conversione in JSON in Powershell

sto facendo questo perché:

  • il JSON reale (non quello presentato nel campione sotto) è abbastanza grande (100k + file) e, se non archieved, la sua dimensione è abbastanza grande; Se riduco la larghezza della tabulazione, la riduzione della dimensione è notevole.
  • l'effettivo JSON ha una profondità di 5+ nodi!
  • Non riesco a utilizzare -Compress poiché il JSON deve essere leggibile dall'uomo
  • Sì, sono d'accordo, se archiviato, la sua dimensione è drasticamente ridotta ma ne ho bisogno anche non archiviata.

codice di esempio:

$object = New-Object PSObject 
Add-Member -InputObject $object -MemberType NoteProperty -Name Phone -Value "SomePhone" 
Add-Member -InputObject $object -MemberType NoteProperty -Name Description -Value "Lorem ipsum dolor.." 
Add-Member -InputObject $object -MemberType NoteProperty -Name Price -Value 99.99 

$object | ConvertTo-Json 

risultato con larghezza tab = 4 caratteri di spazio vuoto.

{ 
    "Phone": "SomePhone", 
    "Description": "Lorem ipsum dolor..", 
    "Price": 99.99 
} 

ho cercato di compressione, ma non dà il controllo sul livello di compressione (come aggressiva compressione dovrebbe essere)

$object | ConvertTo-Json -Compress 

Risultato compressa, ovviamente.

{"Phone":"SomePhone","Description":"Lorem ipsum dolor..","Price":99.99} 

quello che sto cercando di realizzare: risultato con larghezza tab = 2 caratteri di spazio vuoto.

{ 
    "Phone": "SomePhone", 
    "Description": "Lorem ipsum dolor..", 
    "Price": 99.99 
} 

Quello che ho provato finora è nel codice pseudo di seguito. Sono ancora nel giro. Si prega di tirarmi fuori di lì :)

while (1) { 
    Google, StackOverflow 
    Try Stuff found 
    Tweak stuff found 

    if (Correct answer) { 
     break 
    } 
} 

risposta

3

Il seguente codice di dimezzare le dimensioni del trattino:

$json = @" 
{ 
    "Phone": "SomePhone", 
    "Description": "Lorem ipsum dolor..", 
    "Price": 99.99 
} 
"@ 

($json -split '\r\n' | 
% { 
    $line = $_ 
    if ($_ -match '^ +') { 
    $len = $Matches[0].Length/2 
    $line = ' ' * $len + $line.TrimStart() 
    } 
    $line 
}) -join "`r`n" 
+0

ho provato con un (profondità del nodo> = 3) 'più profondo' JSON e sembra funzionare. Grazie! –

Problemi correlati