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)
最后一个值来自哪个额外空格?向数组添加更多值对时,会添加更多空格.
它不是关于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.在更高版本中,因为第二个数组项没有此属性.
| 归档时间: |
|
| 查看次数: |
1106 次 |
| 最近记录: |