Edu*_*Uta 11 powershell json powershell-4.0
我在Powershell中创建了一个JSON,我想在构建时设置自定义选项卡宽度(而不是默认的4个空格,我只想设置2个空格).
我这样做是因为:
示例代码:
$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
Run Code Online (Sandbox Code Playgroud)
标签宽度= 4个空格字符的结果.
{
"Phone": "SomePhone",
"Description": "Lorem ipsum dolor..",
"Price": 99.99
}
Run Code Online (Sandbox Code Playgroud)
我尝试过压缩,但它无法控制压缩级别(压缩程度应该如何)
$object | ConvertTo-Json -Compress
Run Code Online (Sandbox Code Playgroud)
结果压缩,显然.
{"Phone":"SomePhone","Description":"Lorem ipsum dolor..","Price":99.99}
Run Code Online (Sandbox Code Playgroud)
我想要实现的目标:选项卡宽度= 2个空白字符的结果.
{
"Phone": "SomePhone",
"Description": "Lorem ipsum dolor..",
"Price": 99.99
}
Run Code Online (Sandbox Code Playgroud)
到目前为止我尝试过的是下面的伪代码.我还在循环中.请让我离开那里:)
while (1) {
Google, StackOverflow
Try Stuff found
Tweak stuff found
if (Correct answer) {
break
}
}
Run Code Online (Sandbox Code Playgroud)
Nim*_*mai 12
由于 PowerShell 的 ConvertTo-Json 产生非确定性缩进,当前的答案不会产生数据结构中每个深度恰好有两个空格的 JSON。
要使嵌套数据的每个级别比封闭级别多缩进两个空格,需要重建缩进。(就其价值而言,这似乎已在 PowerShell 6中修复)
在编写了我自己的解决方案后,我在 GitHub 上找到了一个几乎相同的解决方案,来自 Facebook 的 Daniel Lo Nigro (Daniel15) here。他是一个 PowerShell 函数,可以接受管道输入。(我使正则表达式匹配更加具体,以减少无意匹配数据的可能性。)
# Formats JSON in a nicer format than the built-in ConvertTo-Json does.
function Format-Json([Parameter(Mandatory, ValueFromPipeline)][String] $json) {
$indent = 0;
($json -Split "`n" | % {
if ($_ -match '[\}\]]\s*,?\s*$') {
# This line ends with ] or }, decrement the indentation level
$indent--
}
$line = (' ' * $indent) + $($_.TrimStart() -replace '": (["{[])', '": $1' -replace ': ', ': ')
if ($_ -match '[\{\[]\s*$') {
# This line ends with [ or {, increment the indentation level
$indent++
}
$line
}) -Join "`n"
}
Run Code Online (Sandbox Code Playgroud)
用法: $foo | ConvertTo-Json | Format-Json
您可以将 Newtonsoft.Json 与 PowerShell 结合使用。PowerShell Gallery中有一个模块,您可以安装它以方便地使用它。
例子:
if (!(Get-Module -ListAvailable -Name "newtonsoft.json")) {
Install-Module -Name "newtonsoft.json" -Scope CurrentUser -Force
}
Import-Module "newtonsoft.json" -Scope Local
$JObject = [Newtonsoft.Json.Linq.JObject]::new(
[Newtonsoft.Json.Linq.JProperty]::new("Phone", "SomePhone"),
[Newtonsoft.Json.Linq.JProperty]::new("Description", "Lorem ipsum dolor.."),
[Newtonsoft.Json.Linq.JProperty]::new("Price", 99.99));
$JObject.ToString()
Run Code Online (Sandbox Code Playgroud)
生产
{
"Phone": "SomePhone",
"Description": "Lorem ipsum dolor..",
"Price": 99.99
}
Run Code Online (Sandbox Code Playgroud)
使用 json 时,它还具有许多其他功能:https : //www.newtonsoft.com/json/help/html/Introduction.htm
小智 6
以下代码将缩进的大小减半:
$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"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2960 次 |
| 最近记录: |