【问题标题】:Can I modify JSON requests with PowerShell v2?我可以使用 PowerShell v2 修改 JSON 请求吗?
【发布时间】:2014-04-28 12:21:02
【问题描述】:

我正在尝试使用 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 |输出文件 $temp

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

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

【问题讨论】:

    标签: json powershell-2.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()
        }
      }
    }
    

    【讨论】:

    • 在这种情况下什么是 Write-String?我已经尝试过了,但我收到一个错误,指出它不是一个可识别的 cmdlet。对该词的 Google 搜索没有显示任何内容。
    • 对不起,我漏掉了一部分或代码,让我们看看编辑。
    • 现在说得通了。谢谢!
    猜你喜欢
    • 2011-03-17
    • 2015-07-01
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多