2015-10-15 54 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和它似乎工作。谢谢! –