使用Powershell

时间:2019-01-30 17:43:10

标签: json powershell

我正在通过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>"
    }
    ]
}

2 个答案:

答案 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编码转换为纯文本。

第三个命令将为您输出数据,以验证它是否按预期工作。