如何在Powershell 4中解析/访问Invoke-WebRequest返回的JSON



我在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响应对象转换为可以向下钻取的对象?

参见 ConvertFrom-json

将 JSON 格式的字符串转换为自定义对象或哈希表。

ConvertFrom-Json cmdlet 转换 JavaScript 对象表示法 (JSON( 格式的字符串到具有 JSON 字符串中每个字段的属性。

将响应转换为自定义对象或哈希表后,可以访问各个属性

该链接包括编码示例

这似乎有效...

[void][System.Reflection.Assembly]::LoadWithPartialName("System.Web.Extensions")
$x = (New-Object -TypeName System.Web.Script.Serialization.JavaScriptSerializer -Property @{MaxJsonLength=67108864}).DeserializeObject($Json.Content)
Write-Host $x.MyArray[0].MyField

。虽然还不知道为什么。

最新更新