PowerShell解析Zendesk JSON:按字段值获取对应数据的问题
正确的PowerShell实现方式
核心思路
先抓住两个关键处理要点:
- 优先用
via.source.from里的姓名、邮箱数据,为空时再从指定ID的自定义字段提取 - 处理自定义字段时精准匹配ID,避免返回全量字段;同时做多层空值判断,杜绝参数验证异常
完整代码示例
# 1. 从Zendesk API获取工单数据(假设已完成认证和请求,$tickets是返回的工单数组) # $tickets = Invoke-RestMethod -Uri "https://yourdomain.zendesk.com/api/v2/tickets.json" -Headers $authHeaders # 2. 替换成你实际的自定义字段固定ID $customNameFieldId = "123456" # 存储用户姓名的字段ID $customEmailFieldId = "789012" # 存储用户邮箱的字段ID # 3. 遍历处理每个工单 foreach ($ticket in $tickets.tickets) { # 初始化用户信息变量 $userName = $null $userEmail = $null # 优先读取via.source.from中的数据 if (-not [string]::IsNullOrWhiteSpace($ticket.via.source.from.name)) { $userName = $ticket.via.source.from.name } if (-not [string]::IsNullOrWhiteSpace($ticket.via.source.from.address)) { $userEmail = $ticket.via.source.from.address } # 姓名为空时,从自定义字段提取 if ([string]::IsNullOrWhiteSpace($userName)) { $nameField = $ticket.custom_fields | Where-Object { $_.id -eq $customNameFieldId } if ($nameField -and -not [string]::IsNullOrWhiteSpace($nameField.value)) { $userName = $nameField.value } } # 邮箱为空时,从自定义字段提取 if ([string]::IsNullOrWhiteSpace($userEmail)) { $emailField = $ticket.custom_fields | Where-Object { $_.id -eq $customEmailFieldId } if ($emailField -and -not [string]::IsNullOrWhiteSpace($emailField.value)) { $userEmail = $emailField.value } } # 输出处理后的结果(也可存入集合用于后续导出) [PSCustomObject]@{ TicketId = $ticket.id UserName = $userName UserEmail = $userEmail Subject = $ticket.subject } }
关键细节解释
- 避免返回全量自定义字段:通过
Where-Object精准匹配字段ID,只筛选目标字段,而非直接返回整个custom_fields数组 - 杜绝参数验证异常:每次取值前用
[string]::IsNullOrWhiteSpace()判断空值,同时检查筛选后的字段是否存在($nameField -and ...),避免引用空对象的属性 - 明确优先级逻辑:严格遵循先取
via数据、为空再 fallback 到自定义字段的需求 - 结构化输出:用
PSCustomObject封装结果,方便后续导出CSV或进一步处理
内容的提问来源于stack exchange,提问作者BrettFK
相关产品推荐
相关产品推荐

