PowerShell中Invoke-RestMethod返回空节点但CMD curl调用正常如何解决
问题根因
ConvertTo-Json默认递归深度仅为2,你的返回数据层级为data > applications > nodes,超过默认深度后内容会被截断,导致输出的nodes字段为空,实际接口已返回正确数据,只是序列化阶段丢失了内容。- 部分GraphQL接口对请求体编码要求严格,PowerShell默认发送的请求体编码不符合要求时会导致参数解析失败。
修复后可运行代码
# 简化Headers构造,无需手动创建字典 $headers = @{ "x-api-key" = "WHp" } # 通过对象转JSON构造请求体,完全避免引号转义问题 $body = @{ query = "{applications(limit: 2) {nodes {name}}}" } | ConvertTo-Json -Compress # 发送请求时指定UTF8编码,兼容接口要求 $response = Invoke-RestMethod -Uri 'https://app.io/Id=Xz' -Method Post -Headers $headers -Body ([System.Text.Encoding]::UTF8.GetBytes($body)) -ContentType 'application/json; charset=utf-8' # 序列化输出时指定足够深度,避免内容截断 $response | ConvertTo-Json -Depth 10
快速验证
你可以先直接输出$response.applications.nodes,如果能看到两个name分别为node1和node2的对象,即可确认之前的问题是ConvertTo-Json深度不足导致的。
内容的提问来源于stack exchange,提问作者vel
相关产品推荐
相关产品推荐

