2015-10-15 29 views
8

içinde JSON'a dönüştürürken sekme genişliğini nasıl değiştirebilirim Powershell'de bir JSON oluşturuyorum ve bunu oluştururken özel bir sekme genişliği ayarlamak istiyorum (yalnızca 2 beyaz alan ayarlamak istiyorum varsayılan 4 beyaz alan yerine) .Powershell

gerçek JSON (değil Aşağıdaki örnekte sunulan bir) oldukça (100k + satırlar) büyük ve arşivlenmemektedir, eğer boyutu oldukça büyük olmasıdır
  • ; çünkü:

    bunu yapıyorum Sekme genişliğini azaltırsam, boyut küçültme dikkate değerdir.

  • gerçek JSON, 5+ düğümün derinliğine sahiptir!
  • JSON'un okunabilir olması gerektiğinden -Compress kullanamıyorum
  • Evet, kabul ediyorum, eğer arşivleniyorsa, boyutu önemli ölçüde azalır ama aynı zamanda arşivden çıkarılmam gerekiyor.

örnek kod: sekme genişliği = 4 boşluk karakterlerle

$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 

için sonuçlar.

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

Ben sıkıştırma denedik ama (nasıl olması gerektiğini saldırgan sıkıştırma) sıkıştırma düzeyi kontrolün belli ki, sıkıştırılmış

$object | ConvertTo-Json -Compress 

Sonucu vermez. sekme genişliği = 2 beyaz boşluk karakterleri ile sonuçlanır:

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

elde etmek çalışıyorum ne.

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

şimdiye kadar denenmiş Aşağıdaki sözde kod olduğunu ettik ne. Hala döngüdeyim. :) beni oradan almak

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

    if (Correct answer) { 
     break 
    } 
} 

cevap

3

Aşağıdaki kod girintisi boyutunu yarıya olacak: Lütfen

$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

Bir 'derin' (düğüm derinliği> = 3) ile JSON test edilmiş ve bunun çalışıyor gibi görünüyor. Teşekkürler! –