也许这是一个简单的问题,并且会被禁止,但我今天花了好几个小时而不是按照我的预期让它工作。 所以我有这样的对象:
data_1 data_2 ... abra_12 ...
我希望将它转换为json,如下所示:
[
{"data_1" : "data_1"},
{"data_2" : "data_2"},
...
]
我试过了:
$result = Get-ChildItem $Path2Search -recurse | Select-String -Pattern '(?<=locI(.*)\(\").+?(?=\")' -casesensitive | foreach {$_.matches} | select value | ConvertTo-Json | Out-File $save2file
但我得到了这个:
{
"Value": "data_1"
},
{
"Value": "data_2"
},
虽然我想这样:
{
"data_1": "data_1"
},
{
"data_2": "data_2"
},
有什么建议吗? :)
答案 0 :(得分:3)
您可以先在键值列表中对结果进行整形,然后将其转换为json。
例如,如果输入是逗号分隔的字符串,则可以使用:
$input = "data_1, data_2, data_3"
$input.Split(',').Trim() |
ForEach-Object {@{$_=$_}} |
ConvertTo-Json |
Out-File "C:\test.txt"
或者如果输入是字符串数组:
$input = @("data_1", "data_2", "data_3")
$input | ForEach-Object {@{$_=$_}} |
ConvertTo-Json |
Out-File "C:\test.txt"
结果将是:
[
{
"data_1": "data_1"
},
{
"data_2": "data_2"
},
{
"data_3": "data_3"
}
]
虽然我更喜欢使用上面的解决方案来创建json结果,但你也可以依赖字符串操作:
$input = "data_1, data_2, data_3"
@"
[
`t$(($input -split '\s*,\s*' |%{"{ `"$_`" : `"$_`" }"}) -join ",`n`t")
]
"@