我正在使用powershell,我试图将其转换为JSON,但问题是需要加倍所有斜杠。因此\
需要转换为\\
,而\\
需要在输出中替换为\\\\
。我使用PowerShell使用以下脚本:
$array = @()
echo "{"; echo '"data":['; (get-counter "\Processor(*)\% Idle Time").CounterSamples.Path | %{ $array += '{ "{#CPUID}":"'+ $_.TrimStart("$LowerCaseComputerName") }
for($i = 0; $i -lt $array.Length - 1; $i++){ $array[$i] + '"},' }
$array[$array.Length - 1] + '"}'
echo "]" ; echo "}";
并且输出im得到正确,除了斜杠需要加倍:
{
"data":[
{ "{#CPUID}":"\\aaronmartinez\processor(0)\% idle time"},
{ "{#CPUID}":"\\aaronmartinez\processor(1)\% idle time"},
{ "{#CPUID}":"\\aaronmartinez\processor(2)\% idle time"},
{ "{#CPUID}":"\\aaronmartinez\processor(3)\% idle time"},
{ "{#CPUID}":"\\aaronmartinez\processor(4)\% idle time"},
{ "{#CPUID}":"\\aaronmartinez\processor(5)\% idle time"},
{ "{#CPUID}":"\\aaronmartinez\processor(6)\% idle time"},
{ "{#CPUID}":"\\aaronmartinez\processor(7)\% idle time"},
{ "{#CPUID}":"\\aaronmartinez\processor(_total)\% idle time"}
]
}
答案 0 :(得分:1)
您需要做的只是一个简单的-Replace '\\','\\'
并完成它。第一个'\\'
是正则表达式,因此\
转义为\\
。它看起来像这样:
$array = @()
"{"
'"data":['
(get-counter "\Processor(*)\% Idle Time").CounterSamples.Path | %{ $array += '{ "{#CPUID}":"'+ $_.TrimStart("$LowerCaseComputerName") }
for($i = 0; $i -lt $array.Length - 1; $i++){ ($array[$i] -replace '\\','\\')+ '"},' }
($array[$array.Length - 1] -Replace '\\','\\')+ '"}'
"]"
"}"
编辑:虽然这确实回答了您的问题,但我认为更好的解决方案是正确形成对象并使用convertto-json cmdlet。
$object = [pscustomobject][ordered]@{'Data'=@()}
(get-counter "\Processor(*)\% Idle Time").CounterSamples.Path | %{ $Object.data += [pscustomobject]@{'#CPUID'= $_.TrimStart("$LowerCaseComputerName") }}
$object | ConvertTo-Json
这给了你相同的结果我很确定。
答案 1 :(得分:1)
如果您使用的是PowerShell v3,则有一个cmdlet ConvertTo-Json
,用于将数据结构转换为JSON格式。你可能会发现这比手工制作更容易。 {
字符使字符串格式化非常混乱。