【发布时间】:2020-05-06 16:22:34
【问题描述】:
我在 powershell 脚本 (Powershell 4.0) 中对 API 进行了以下调用:
$Json = Invoke-WebRequest -Uri $RequestURL -UseBasicParsing -Headers $headers -ContentType 'application/json; charset=utf-8' -Method POST -Body $postParams -TimeoutSec 40
...并将响应的内容(JSON 格式的字符串)写入文件:
Set-Content $path -Value $Json.Content
典型响应示例...
{
"MyArray": [{
"MyField": "A1",
"MyField2": "A2"
}, {
"MyField": "B1",
"MyField2": "B2"
}]
}
一切都很好,但是现在我需要将返回的内容解析为 JSON 并从这个 Powershell 脚本中查询一些属性。
我想我需要将我的字符串转换为“正确的”JSON,然后转换为 powershell 对象才能访问属性......所以我尝试了 ConvertTo-Json 和 ConvertFrom-Json 的组合,但似乎永远无法以字符串以外的任何方式访问它。比如……
$x = $Json.Content | ConvertTo-Json
Write-Host $x.MyArray[0].MyField
$y = $x | ConvertFrom-Json
Write-Host $y[0].MyArray[0].MyField
在上述两种情况下,我都会收到错误消息“无法索引到空数组”,表明 MyArray 为空。
如何将我的 $Json 响应对象转换为可以深入研究的对象?
【问题讨论】:
-
考虑
Invoke-RestMethod;它会自动处理转换。除此之外,您似乎实际上是在ConvertFrom-Json ($Json.Content)之后;内容是 JSON,您不想将其转换为到 JSON。如果我将您的回复复制到剪贴板并执行(Get-Clipboard | ConvertFrom-Json).MyArray[0].MyField,我会得到预期的结果。 -
@JeroenMostert - ConvertFrom-Json ($Json.Content) 导致错误“ConvertFrom-Json:无法处理参数,因为参数“名称”的值无效”。
-
嗯,在这种情况下,管道输入应该仍然可以工作 (
$Json.Content | ConvertFrom-Json)。否则,Content对象会发生一些奇怪的事情,阻止它被正确访问,尽管我不知道那可能是什么(编码不匹配)?
标签: json powershell