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

使用PowerShell的ConvertFrom-Json解析JSON时数据截断及格式转换问题

搞定PowerShell解析JSON的截断问题,还能转成你要的竖线格式

嘿,先给你捋清楚:你看到的数据截断只是PowerShell控制台的显示限制而已,实际你已经拿到了完整的JSON数据!先解决这个显示问题,再给你写脚本转换成你要的格式。

第一步:解决数据截断问题

当你直接用Invoke-WebRequest $request | ConvertFrom-Json时,PowerShell为了不让输出太杂乱,会自动截断长内容,但转换后的JSON对象是完整的。你可以换个方式先把完整内容提取出来:

$request = 'http://localhost:8000/hi.json'
# 先获取响应的完整文本内容,再转成JSON对象
$jsonData = (Invoke-WebRequest $request).Content | ConvertFrom-Json

现在你直接查看$jsonData.data,就能看到完整的结构了,不会再出现na...这种截断的情况。

第二步:转换成竖线分隔格式

接下来写脚本遍历JSON结构,生成你要的格式。这里需要处理每个站点的totalMessages和identifier数组,拼接成指定的字符串:

$request = 'http://localhost:8000/hi.json'
$jsonData = (Invoke-WebRequest $request).Content | ConvertFrom-Json

# 遍历data下的所有站点(swindon、Reading、Yanki)
foreach ($site in $jsonData.data.PSObject.Properties) {
    $siteName = $site.Name
    $siteInfo = $site.Value

    # 输出totalMessages对应的行
    "$siteName|totalMessages|$($siteInfo.totalMessages)"

    # 遍历identifier数组里的每一项
    foreach ($item in $siteInfo.identifier) {
        # 按照你的示例调整名称:ET_2→ET2,UT_2→U_T
        $formattedName = switch ($item.name) {
            'ET_2' { 'ET2' }
            'UT_2' { 'U_T' }
            default { $item.name }
        }
        "$siteName|identifier|$formattedName|$($item.staleCount)"
    }
}

运行这个脚本后,输出就完全符合你的要求了:

swindon|totalMessages|0
swindon|identifier|ET|4
swindon|identifier|ET2|4
Reading|totalMessages|0
Reading|identifier|J3|2
Yanki|totalMessages|0
Yanki|identifier|UT|4
Yanki|identifier|U_T|4

小说明

  • 用$jsonData.data.PSObject.Properties是因为data下面的站点名称是动态的(swindon、Reading这些),这样能自动遍历所有站点,不用硬写固定名称
  • 名称转换的switch块是根据你给的示例做的,如果后续有更多需要调整的名称,直接在switch里加新规则就行

内容的提问来源于stack exchange,提问作者mr i.o

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:48:54