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

时间:2016-03-15 15:19:31

标签: arrays json powershell

使用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    "

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

2 个答案:

答案 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的属性。"