【问题标题】:Can't get keys of an object created from ConvertFrom-Json无法获取从 ConvertFrom-Json 创建的对象的键
【发布时间】:2018-03-28 18:31:57
【问题描述】:

ConvertFrom-Json 创建对象时,它不会创建“正常”对象并且缺少GetEnumerator()keys

下面是一些演示代码:

$string = '{
  "OBJECT": "SOP10107",
  "OBJECTKEY": "2|OSTD-9999           "
}'

$obj = $string | ConvertFrom-Json

$obj

# no results returned
$obj  | % getEnumerator | % {
  $_.key
  $_.value
}

# no results returned
$obj.keys

$myobj = @{
  "key1" = "val1"
  "key2" = "val2"
}

$myobj

# returns expected result
$myobj | % getEnumerator | % {
  $_.key
  $_.value
}

# returns expected result
$myobj.keys

【问题讨论】:

  • $obj.OBJECT$obj.OBJECTKEY? This 是你要找的,我猜。
  • 哎呀。我错过了“这个”的链接。我会试试看。

标签: powershell


【解决方案1】:

ConvertFrom-JSON 创建一个PSCustomObject 类型的普通对象,就像Select-Object ++。

$string = '{
    "OBJECT": "SOP10107",
    "OBJECTKEY": "2|OSTD-9999           "
  }'

$obj = $string | ConvertFrom-Json

#Examine object type and properties
$obj | Get-Member
TypeName: System.Management.Automation.PSCustomObject

Name        MemberType   Definition
----        ----------   ----------
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
ToString    Method       string ToString()
OBJECT      NoteProperty string OBJECT=SOP10107
OBJECTKEY   NoteProperty string OBJECTKEY=2|OSTD-9999

#Access known properties directly
$obj.OBJECT
SOP10107

$obj.OBJECTKEY
2|OSTD-9999

如果您想循环属性(例如,因为您不知道名称),请使用$obj.psobject.properties,它会返回一个包含所有属性的数组。

#List Name and Value for each property. You can replace Select-Object with `Foreach-Object` to loop through them    
$obj.psobject.properties | Select-Object Name, Value

Name      Value
----      -----
OBJECT    SOP10107
OBJECTKEY 2|OSTD-9999

【讨论】:

  • 这行得通,Vivek 提供的链接也是如此。我喜欢你的解释,解决方案也更容易理解。
猜你喜欢
  • 2017-07-21
  • 2016-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多