我正在通过Powershell在供应商的一个应用程序上进行API调用。 API的响应是一个JSON文件。 JSON文件的仅一部分使用BASE64编码。有没有办法使用powershell读取JSON文件并解码BASE64中编码的部分? JSON文件示例:
我可以使用以下代码从json文件中手动复制“元”数据并使用powershell对其进行解码:
[System.Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String("BASE64DATA"))
但是,当我尝试传递JSON文件而不是复制的文本时,出现错误。
{
results: [
{
"id": "<Plain Text Data>",
"meta": "<BASE64 Encoded Data>",
"info": "<Plain Text Data>"
},
{
"id": "<Plain Text Data>",
"meta": "<BASE64 Encoded Data>",
"info": "<Plain Text Data>"
}
]
}
答案 0 :(得分:0)
您可以将json作为对象,然后将其转换,解码并转换回json。
$Json = Get-Content -Path c:\JsonFilePath.json | ConvertFrom-Json
$NewJson = $Json.Results | Foreach-Object -Process {
$Converted = [System.Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String($_.meta))
$_.meta = $Converted
}
$NewJson | ConvertTo-Json
答案 1 :(得分:0)
由于您正在处理返回JSON的RESTful API,所以我建议使用Invoke-RestMethod cmdlet提取数据,它将自动为您解析JSON成为对象。
下面是如何完成此操作的示例。
$json = Invoke-RestMethod -Uri 'https://something'
$json.results | ForEach-Object { $_.meta = [System.Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String($_.meta)) }
$json.results
它将连接,提取JSON数据,并在第一个命令中将其转换为对象
第二个命令会将base64编码转换为纯文本。
第三个命令将为您输出数据,以验证它是否按预期工作。