我在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
。虽然还不知道为什么。