在 PowerShell 中解析 ReST 响应
Parsing a ReST response in PowerShell
我正在尝试在 PowerShell 中实施 ReST 请求。下面是我在 PowerShell 中的 $response。
@type : bundleObject
id : ZZZZZZ160000000000RU
orgId : 000007
name : xxxxxxxxxx
description : Bundle being used for QA.
createTime : 2015-04-24T15:13:24.000Z
updateTime : 2015-04-24T15:13:24.000Z
createdBy : xxx@gmail.com
updatedBy : yyy@gmail.com
lastVersion : 1.0
paid : False
accessType : PUBLIC
objects : {@{@type=bundleRefObject; objectTypeCode=17;
objectId=ZZZZZZ17000000000003;
objectName=Mapping_01; objectDescription=;
objectUpdateTime=2015-04-24T15:05:41.000Z},
@{@type=bundleRefObject; objectTypeCode=17;
objectId=ZZZZZZ17000000000004;
objectName=Mapping_02; objectDescription=;
objectUpdateTime=2015-04-24T15:09:28.000Z},
@{@type=bundleRefObject; objectTypeCode=17;
objectId=ZZZZZZ17000000000005;
objectName=Mapping_03; objectDescription=;
objectUpdateTime=2015-04-24T15:11:59.000Z}}
externalId : CYIhYNVCSdC6J17N-LyA6A
在对象部分,有 3 个对象 ID。我需要将这些 ID 和名称复制到列表中,以备后用。我已经使用
成功获取了对象部分
$responseobject = $response.objects
但是,我不确定如何获取对象名称和对象 ID 并保存在列表中。我应该在这里使用 PSCustomObject 吗?
------------------------更新
这里还有一个问题。我使用
将值添加到哈希图中
$response_connection_hashmap = $response_connection|foreach {
@{ $_.name = $_.id }
}
但是,在使用键
获取值时
$response_connection_hashmap.Item('Key_1')
我收到错误
Exception getting "Item": "Cannot convert argument "index", with value: "Key_1", for "get_Item" to type "System.Int32": "Cannot convert value "Key_1" to type "System.Int32". Error: "Input string was not in a correctformat.
我还漏掉了什么吗?
答案取决于您打算如何使用这些值。
如果您只需要一个 ID 数组,您可以使用
($response.objects).objectIds
或者,以更长的形式(旧版本 PS 所必需)
$response.objects | Select-Object -ExpandProperty objectIds
如果需要把值拉出来一个一个操作,可以用foreach
遍历对象
$response.objects | foreach {
Do-SomethingWith -id $_.objectID -updateTime $_.objectUpdateTime
}
如果您需要(用于进一步处理)一个包含所有对象的 ID 和 UpdateTime 的变量,那么您可以构建一个哈希映射数组:
$responseObjectList = $response.objects | foreach {
@{ id = $_.objectID; updateTime = $_.objectUpdateTime }
}
或者 PSCustomObject
s,如果你想让它们打印得很好的话。
$responseObjectList = $response.objects | foreach {
[PSCustomObject]@{ id = $_.objectID; updateTime = $_.objectUpdateTime }
}
我正在尝试在 PowerShell 中实施 ReST 请求。下面是我在 PowerShell 中的 $response。
@type : bundleObject
id : ZZZZZZ160000000000RU
orgId : 000007
name : xxxxxxxxxx
description : Bundle being used for QA.
createTime : 2015-04-24T15:13:24.000Z
updateTime : 2015-04-24T15:13:24.000Z
createdBy : xxx@gmail.com
updatedBy : yyy@gmail.com
lastVersion : 1.0
paid : False
accessType : PUBLIC
objects : {@{@type=bundleRefObject; objectTypeCode=17;
objectId=ZZZZZZ17000000000003;
objectName=Mapping_01; objectDescription=;
objectUpdateTime=2015-04-24T15:05:41.000Z},
@{@type=bundleRefObject; objectTypeCode=17;
objectId=ZZZZZZ17000000000004;
objectName=Mapping_02; objectDescription=;
objectUpdateTime=2015-04-24T15:09:28.000Z},
@{@type=bundleRefObject; objectTypeCode=17;
objectId=ZZZZZZ17000000000005;
objectName=Mapping_03; objectDescription=;
objectUpdateTime=2015-04-24T15:11:59.000Z}}
externalId : CYIhYNVCSdC6J17N-LyA6A
在对象部分,有 3 个对象 ID。我需要将这些 ID 和名称复制到列表中,以备后用。我已经使用
成功获取了对象部分$responseobject = $response.objects
但是,我不确定如何获取对象名称和对象 ID 并保存在列表中。我应该在这里使用 PSCustomObject 吗?
------------------------更新
这里还有一个问题。我使用
将值添加到哈希图中$response_connection_hashmap = $response_connection|foreach {
@{ $_.name = $_.id }
}
但是,在使用键
获取值时$response_connection_hashmap.Item('Key_1')
我收到错误
Exception getting "Item": "Cannot convert argument "index", with value: "Key_1", for "get_Item" to type "System.Int32": "Cannot convert value "Key_1" to type "System.Int32". Error: "Input string was not in a correctformat.
我还漏掉了什么吗?
答案取决于您打算如何使用这些值。
如果您只需要一个 ID 数组,您可以使用
($response.objects).objectIds
或者,以更长的形式(旧版本 PS 所必需)
$response.objects | Select-Object -ExpandProperty objectIds
如果需要把值拉出来一个一个操作,可以用foreach
遍历对象
$response.objects | foreach {
Do-SomethingWith -id $_.objectID -updateTime $_.objectUpdateTime
}
如果您需要(用于进一步处理)一个包含所有对象的 ID 和 UpdateTime 的变量,那么您可以构建一个哈希映射数组:
$responseObjectList = $response.objects | foreach {
@{ id = $_.objectID; updateTime = $_.objectUpdateTime }
}
或者 PSCustomObject
s,如果你想让它们打印得很好的话。
$responseObjectList = $response.objects | foreach {
[PSCustomObject]@{ id = $_.objectID; updateTime = $_.objectUpdateTime }
}