PowerShell如何从带HTTP头的响应字符串中提取JSON
提取API响应中HTTP头后的JSON内容(PowerShell)
嘿,这个问题我之前也碰到过!PowerShell调用API返回的响应混了HTTP头和JSON,总不能硬删前N行对吧?其实有个超简洁的方法,利用HTTP协议的规则直接拆分就行。
核心思路
HTTP响应里,头信息和正文的分隔符是两个连续的回车换行符(也就是你看到的空行,对应\r\n\r\n)。我们可以直接用这个分隔符把整个字符串拆成两部分,取第二部分就是纯JSON了。
具体代码实现
假设你的API响应字符串存在$response变量里,一行代码就能搞定:
# 拆分字符串为两部分,取第二部分(JSON内容) $jsonContent = $response -split '\r\n\r\n', 2 | Select-Object -Index 1
这里的关键是-split的第二个参数2,它告诉PowerShell只把字符串拆成最多两部分,避免后续的换行符干扰拆分结果。
测试示例(用你提供的响应)
我拿你给的示例响应做了个测试,代码如下:
# 模拟API返回的响应字符串 $sampleResponse = @" HTTP/1.1 200 OK X-VMWARE-VCLOUD-REQUEST-ID: 6dbdbd65-adea-44de-a6a1-cdc8a9671f0b X-VMWARE-VCLOUD-REQUEST-EXECUTION-TIME: 30,30 Vary: Accept-Encoding, User-Agent Content-Length: 2681 Cache-Control: no-store, must-revalidate Content-Type: application/vnd.vmware.vcloud.query.records+json;version=36.2 Date: Tue, 17 Jan 2023 18:10:36 GMT { "otherAttributes" : { }, "link" : [ { "otherAttributes" : { }, } "@ # 提取JSON部分 $jsonContent = $sampleResponse -split '\r\n\r\n', 2 | Select-Object -Index 1 # 转成PowerShell对象(可选) $jsonObject = $jsonContent | ConvertFrom-Json
执行后$jsonContent就是你需要的纯JSON字符串,直接用ConvertFrom-Json转成对象就能操作了。
为什么这个方法更好?
比起把所有行拆出来再遍历找空行,这个方法一步到位,代码更简洁,效率也更高——毕竟不用循环处理每一行,直接按协议标准拆分就行。
内容的提问来源于stack exchange,提问作者Gabrie
相关产品推荐
相关产品推荐

