2015-10-15 10 views
8

Tworzę JSON w Powershell i chcę ustawić niestandardową szerokość zakładki podczas jego budowania (zamiast domyślnych 4 białych spacji chcę ustawić tylko 2 białe spacje) .Jak zmienić szerokość zakładki podczas konwersji do JSON w Powershell

Robię to, ponieważ:

  • rzeczywista JSON (nie ten, przedstawiony w poniższym przykładzie) jest dość duża (100k + wierszy), a jeśli nie archieved, to wielkość jest dość duży; Jeśli zmniejszę szerokość zakładki, zauważalne jest zmniejszenie rozmiaru.
  • rzeczywisty JSON ma głębokość 5+ węzłów!
  • Nie mogę korzystać -Compress ponieważ JSON musi być czytelny dla człowieka
  • Tak, zgadzam się, jeśli w archiwum, to wielkość jest znacznie zmniejszone, ale muszę też niezarchiwizowane.

Przykładowy kod:

$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 

Wynik z szerokością zakładki = 4 białych znaków.

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

Próbowałem kompresji ale nie daje kontrolę nad poziomem kompresji (jak mocna kompresja powinna być)

$object | ConvertTo-Json -Compress 

Wynik skompresowany, oczywiście.

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

Co usiłuję osiągnąć: wynik z szerokością zakładki = 2 białych znaków.

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

Co próbowałem tak daleko jest w pseudo kod poniżej. Wciąż jestem w pętli. Proszę zabierz mnie tam :)

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

    if (Correct answer) { 
     break 
    } 
} 

Odpowiedz

3

Poniższy kod zmniejszy wielkość indent:

$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

testowałem z 'głębszym' (głębokość węzła> = 3) i JSON wydaje się działać. Dzięki! –

Powiązane problemy