带有数组的Powershell ConvertFrom-Json为数组值添加了额外的空格

Pet*_*ter 6 arrays powershell json

使用ConvertFrom-Json编写powershell脚本时,似乎在将数组中的值转换为字符串时,会使用其他空格转换数组中的值.以下代码在一个小代码示例中显示:

$object = @"
     { 
          "object":
          {            
            "prop1": "value",
            "array":[
               { "key": "value"},
               { "key2": "valuevalue"},
               { "key3": "valuevalue"},
               { "key4": "valuevalue"},
               { "key5": "valuevalue"}
            ]
          }
     } 
"@ | ConvertFrom-Json

$object.object.prop1
$object.object.array.key

$t = $object.object.prop1
$t2= $object.object.array.key
"""$t"""
"""$t2"""
Run Code Online (Sandbox Code Playgroud)

输出:

value
value
"value"
"value    "
Run Code Online (Sandbox Code Playgroud)

最后一个值来自哪个额外空格?向数组添加更多值对时,会添加更多空格.

Rom*_*min 7

它不是关于ConvertFrom-Json,它是关于$array.value.从v3或v4开始,PowerShell允许使用点表示法获取数组项的指定属性.如果缺少某个属性,则除非启用严格模式,否则结果为null.在后一种情况下,它失败了.

这是一个例子:

$array = @(
    [PSCustomObject]@{key = 'value'}
    [PSCustomObject]@{key2 = 'valuevalue'}
)

$result = $array.key
$result.GetType().Name
"[$result]"
Run Code Online (Sandbox Code Playgroud)

输出(注意结果类型和额外空间)

Object[]
[value ]
Run Code Online (Sandbox Code Playgroud)

所以结果是一个数组.当您将数组转换为字符串时,其项目将使用空格作为默认分隔符(可以更改$OFS).

如果您在PowerShell v2中运行上面的示例,则[]因为v2不支持使用点表示法获取数组项属性.

如果运行该示例,Set-StrictMode -Version 2则失败并显示错误 无法在此对象上找到属性"key".它在所有PowerShell版本中都失败了.在v2中,因为数组没有属性key.在更高版本中,因为第二个数组项没有此属性.