2015-10-15 26 views
8

我在Powershell中創建JSON,並且在構建它時設置自定義製表符寬度(而不是默認的4個空格,我只想設置2個空格) 。如何在Powershell中轉換爲JSON時更改制表符寬度

我這樣做是因爲:

  • 實際JSON(而不要使用下面的示例中介紹)是相當大的(100K +行),如果沒有archieved,它的大小是相當大的;如果我減少標籤寬度,減小尺寸是值得注意的。
  • 實際的JSON有5個節點的深度!
  • 因爲JSON需要是人類可讀的,我不能使用-compress
  • 是的,我同意,如果歸檔,它的大小顯着降低,但我需要它也未歸檔。

樣品的編號:

$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 

結果與標籤寬度= 4個的空白字符。

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

我試過壓縮,但它並沒有給過壓縮電平控制(應壓縮如何侵略性是)

$object | ConvertTo-Json -Compress 

結果壓縮,效果顯着。

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

我想實現:與標籤寬度= 2個空白字符導致。

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

我已經試過到目前爲止是在下面的僞代碼。我仍然在循環中。請讓我離開那裏:)

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

    if (Correct answer) { 
     break 
    } 
} 

回答

3

下面的代碼將減半縮進大小:

$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

我用「更深」(節點深度> = 3)測試JSON和它似乎工作。謝謝! –

相關問題