我可以使用PowerShell v2修改JSON请求吗?

时间:2014-04-28 12:21:03

标签: json powershell-v2.0

我试图使用PowerShell v2(我的版本没有有用的ConverFrom-Json或Invoke-RestMethod cmdlet)来美化一些JSON响应,所以我可以输出响应至少一个CSV文件。我可以使用它来搜索数据,但是使用Export-CSV cmdlet很难获得正确的格式。

这可能吗?

我的基本代码是:

[string]$url = "http://saucelabs.com/rest/v1/info/browsers/webdriver"
enter code here`$temp = "SauceLabsSupportedEnvs.csv"
# Accessing the REST API at Sauce Labs and downloading to a file
$json = (New-Object Net.Webclient).DownloadString($url)

我想要做的是将$ json响应变为可用的东西。我尝试过但未能开始工作的是这两个:

尝试转换分隔符     $ json | ConvertTo-Csv -Delimiter" {" -NoTypeInformation | Out-File $ temp

或者只是导出数据是默认的     $ json | Export-Csv -Path $ temp

两者都只是给我CSV文件中的类型信息。

1 个答案:

答案 0 :(得分:1)

在我自己的PowerShell V1.0或PowerShell V2.0中,我将JSON响应转换为XML然后利用它。当JSON太大时,这在PowerShell 3.0中也很有用。

Add-Type -AssemblyName System.ServiceModel.Web, System.Runtime.Serialization

$utf8 = [System.Text.Encoding]::UTF8    
function Write-String
{
  PARAM([Parameter()]$stream,
        [Parameter(ValueFromPipeline=$true)]$string)

  PROCESS
  {
    $bytes = $utf8.GetBytes($string)
    $stream.Write( $bytes, 0, $bytes.Length )
  }  
}

function Convert-JsonToXml
{
  PARAM([Parameter(ValueFromPipeline=$true)][string[]]$json)

  BEGIN
  { 
    $mStream = New-Object System.IO.MemoryStream 
  }

  PROCESS
  {
    $json | Write-String -stream $mStream
  }

  END
  {
    $mStream.Position = 0
    try
    {
       $jsonReader = [System.Runtime.Serialization.Json.JsonReaderWriterFactory]::CreateJsonReader($mStream,[System.Xml.XmlDictionaryReaderQuotas]::Max)
       $xml = New-Object Xml.XmlDocument
       $xml.Load($jsonReader)
       $xml
    }
    finally
    {
       $jsonReader.Close()
       $mStream.Dispose()
    }
  }
}

function Convert-XmlToJson
{
  PARAM([Parameter(ValueFromPipeline=$true)][Xml]$xml)

  PROCESS
  {
    $mStream = New-Object System.IO.MemoryStream
    $jsonWriter = [System.Runtime.Serialization.Json.JsonReaderWriterFactory]::CreateJsonWriter($mStream)
    try
    {
      $xml.Save($jsonWriter)
      $bytes = $mStream.ToArray()
      [System.Text.Encoding]::UTF8.GetString($bytes,0,$bytes.Length)
    }
    finally
    {
      $jsonWriter.Close()
      $mStream.Dispose()
    }
  }
}