You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell v2中向控制台格式化输出JSON响应?

嘿,在PowerShell v2里格式化输出JSON响应确实有点棘手——毕竟ConvertFrom-Json和ConvertTo-Json这些方便的cmdlet是从PowerShell v3才开始有的。不过咱们可以借助.NET类库来实现需求,下面给你两种实用的方案:

方案1:用原生.NET类输出结构化对象

这个方案会把JSON响应转成PowerShell对象,利用PowerShell自带的对象格式化能力输出,看数据结构很清晰:

"start"

# 加载处理JSON需要的.NET程序集
Add-Type -AssemblyName System.Web.Extensions

# 用WebClient简化请求,直接获取JSON内容
$webClient = New-Object System.Net.WebClient
$jsonContent = $webClient.DownloadString("http://ipinfo.io/json")

# 把JSON字符串反序列化为PowerShell对象
$serializer = New-Object System.Web.Script.Serialization.JavaScriptSerializer
$jsonObject = $serializer.DeserializeObject($jsonContent)

# 直接输出对象,PowerShell会自动格式化展示
$jsonObject

"done"

运行后你会看到控制台以层级结构展示JSON里的键值对,可读性拉满。

方案2:输出标准缩进格式的JSON字符串

如果你需要输出标准的格式化JSON文本(而不是PowerShell对象),可以用Newtonsoft.Json这个老牌JSON处理库,步骤如下:

第一步:准备Newtonsoft.Json库

由于PowerShell v2基于.NET Framework 2.0,你需要获取适配.NET 2.0版本的Newtonsoft.Json.dll文件,将其放到当前脚本所在目录后,执行以下命令加载:

# 加载本地的Newtonsoft.Json.dll
Add-Type -Path ".\Newtonsoft.Json.dll"

第二步:格式化输出JSON

"start"

# 获取原始JSON内容
$webClient = New-Object System.Net.WebClient
$jsonContent = $webClient.DownloadString("http://ipinfo.io/json")

# 把JSON解析后再以缩进格式序列化
$prettyJson = [Newtonsoft.Json.JsonConvert]::SerializeObject(
    [Newtonsoft.Json.JsonConvert]::DeserializeObject($jsonContent),
    [Newtonsoft.Json.Formatting]::Indented
)

# 输出格式化后的JSON
Write-Host $prettyJson

"done"

这样就能得到带换行和缩进的标准JSON文本,完全满足“Pretty Print”的需求。

基于你原始代码的修改版

如果你想沿用自己一开始写的WebRequest代码,只需要加上读取响应流和处理JSON的逻辑就行:

"start"

Add-Type -AssemblyName System.Web.Extensions

$request = [System.Net.WebRequest]::Create("http://ipinfo.io/json")
$request.Method = "GET"
[System.Net.WebResponse]$response = $request.GetResponse()

# 读取响应流里的JSON内容
$streamReader = New-Object System.IO.StreamReader($response.GetResponseStream())
$jsonContent = $streamReader.ReadToEnd()
# 记得关闭流和响应对象
$streamReader.Close()
$response.Close()

# 反序列化为对象并输出
$serializer = New-Object System.Web.Script.Serialization.JavaScriptSerializer
$jsonObject = $serializer.DeserializeObject($jsonContent)
$jsonObject

"done"

内容的提问来源于stack exchange,提问作者Thufir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:05:57