使用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"""
输出:
value
value
"value"
"value "
最后一个值来自哪个额外空格?向数组添加更多值对时,会添加更多空格。
答案 0 :(得分:7)
不是import {Component} from 'angular2/core';
import {ApproutesComponent} from '../app/approutes';
import {ROUTER_DIRECTIVES, ROUTER_PROVIDERS, RouteConfig} from 'angular2/router';
@RouteConfig([
{path: '/d/...', component: ApproutesComponent, name: 'ApproutesCmp', useAsDefault:true}
])
@Component({
selector: 'main-app',
templateUrl: 'app/r/main/rmain.html',
directives:[ROUTER_DIRECTIVES]
})
export class RroutesComponent {
constructor(){}
}
,而是约ConvertFrom-Json
。
从v3或v4开始,PowerShell允许使用点表示法获取数组项的指定属性。
如果缺少某个属性,则除非启用严格模式,否则结果为null。
在后一种情况下,它失败了。
以下是示例:
$array.value
输出(记下结果类型和额外空格)
$array = @(
[PSCustomObject]@{key = 'value'}
[PSCustomObject]@{key2 = 'valuevalue'}
)
$result = $array.key
$result.GetType().Name
"[$result]"
所以结果是一个数组。当您将数组转换为字符串时,其项目是
使用空格作为默认分隔符(可以由Object[]
[value ]
更改)。
如果您在PowerShell v2中运行上述示例,则会获得$OFS
,因为v2不会
支持使用点表示法获取数组项属性。
如果您使用[]
运行示例,则会因错误而失败
在此对象上找不到属性“key”。在所有PowerShell版本中都失败。在v2中,因为数组没有属性Set-StrictMode -Version 2
。在更高版本中,因为第二个数组项没有此属性。
答案 1 :(得分:0)
如果你像这样编写json可能会更有意义:
{
"object":
{
"prop1": "value",
"array":[
{ "Property1": "value1"},
{ "Property1": "value2"},
{ "Property1": "value3"},
{ "Property1": "value4"},
{ "Property1": "value5"}
]
}
}
换句话说,后续数组成员会得到空字符串,因为它们没有名为" Key的属性。"