【发布时间】:2019-01-28 18:39:14
【问题描述】:
我正在调用此处记录的 VSTS 拉取请求查询:https://docs.microsoft.com/en-us/rest/api/vsts/git/pull%20request%20query/get?view=vsts-rest-4.1
它返回一个结果对象数组。我想检测什么时候没有返回结果并做出相应的反应。我以为我可以检查response.results.length,但即使没有结果也会是1。它返回一个包含 1 个空对象的数组。我很难检测到这种情况。我想到的一个解决方案是:
if(($pullRequests.results | Get-Member -MemberType Properties).Length -eq 0){一些代码}因为一个普通的 ps 对象有 4 个成员,并且填充的对象有一个额外的 note 属性,所以它可以工作。我的方法看起来很hackish,有没有更好的方法?
我尝试检查长度、存在和布尔:
PS> $pullRequests.results[0].Length 1 PS> $temp = $pullRequests.results[0] PS> $临时|获取会员 类型名称:System.Management.Automation.PSCustomObject 名称 MemberType 定义 ---- ---------- ---------- Equals Method bool Equals(System.Object obj) GetHashCode 方法 int GetHashCode() GetType 方法类型 GetType() ToString 方法字符串 ToString() PS> $temp -eq $null 错误的 PS> if($temp){"YAY"}else{"BOO"} 耶【问题讨论】:
-
这实际上听起来像是 API 中的一个错误——空数组不是空对象。你怎么得到
$pullRequests-- 和Invoke-RestMethod?尝试Invoke-WebRequest以查看它实际返回的内容以及是否可以在将其传递给ConvertFrom-Json之前对其进行按摩。 (这也表明反过来应该是可能的——检查($pullRequests.results[0] | ConvertTo-Json -Compress) -eq "{}"。虽然这仍然有点老套和低效。) -
如果我使用 webRequest 响应内容包含:"results":[{}]
-
响应一个“未电镀”对象的数组
-
那么我会检查您收到的回复是否为
[{}]和| ConvertFrom-Json否则。 -
根据文档,“列表中的每个条目都是提交->拉取请求的字典。”所以从技术上讲,如果您向它提供一个查询,则返回一个空字典是正确的。如果提供了多个查询,则每个查询都可能为空。要查看单个结果是否为空,最干净的方法可能是
if ($result | Get-Member -Type Properties)。