在powershell 3中为json做好准备

时间:2014-07-16 19:46:38

标签: json powershell powershell-v3.0

给定一个标准的json字符串值:

$jsonString = '{ "baz": "quuz", "cow": [ "moo", "cud" ], "foo": "bar" }'

如何使用换行符,最好不使用暴力正则表达式,这怎么能让它变得漂亮?

到目前为止我找到的最简单的方法是:

$jsonString | ConvertFrom-Json | ConvertTo-Json 

然而,这看起来有点傻。

4 个答案:

答案 0 :(得分:10)

适合我。括号确保在管道之前完成get-content。 convertto-json的默认深度为2,通常太低。

function pjson ($jsonfile) {
  (get-content $jsonfile) | convertfrom-json | convertto-json -depth 100 | 
    set-content $jsonfile
}

答案 1 :(得分:5)

在@ JS2010的答案中,我添加了逻辑以转出某些字符并进一步清理输出。括号似乎很关键,-depth很大,因为如果没有它,您可能会丢失细节,据我所见,深度超过了默认值5,我相信是这样。

function Format-Json ($JSON)
{
    $PrettifiedJSON = ($JSON) | convertfrom-json | convertto-json -depth 100 | ForEach-Object { [System.Text.RegularExpressions.Regex]::Unescape($_) }
    $PrettifiedJSON
}

答案 2 :(得分:4)

如果你真的不想走最简单的路线,即使用内置的PowerShell函数| ConvertFrom-Json | ConvertTo-Json,这是另一种使用JSON.net的方法

# http://james.newtonking.com/projects/json-net.aspx
Add-Type -Path "DRIVE:\path\to\Newtonsoft.Json.dll"

$jsonString = '{ "baz": "quuz", "cow": [ "moo", "cud" ], "foo": "bar" }'
[Newtonsoft.Json.Linq.JObject]::Parse($jsonString).ToString()

答案 3 :(得分:-1)

我认为你在寻找的是:

$jsonString = @{ 
'baz' = 'quuz'
'cow'= "moo, cud"
'foo'= "bar" 
}
$jsonString|ConvertTo-Json

它产生此输出

{
    "baz":  "quuz",
    "cow":  "moo, cud",
    "foo":  "bar"
}

添加了备注 您还可以将您的牛值排列为"美化"它多一点:

 $jsonString = @{ 
    'baz' = 'quuz'
    'cow'= @("moo"; "cud")
    'foo'= "bar" 
    }

输出:

{
    "baz":  "quuz",
    "cow":  [
                "moo",
                "cud"
            ],
    "foo":  "bar"
}