使用ConvertFrom-Json未返回记录的技术求助
问题:使用ConvertFrom-Json处理Madden导出数据时未返回任何记录
我尝试解析一份Madden导出的JSON数据,原始数据的结构大致如下(部分内容省略):
StatusCode : 0 StatusDescription : Content : {123, 10, 32, 32...} RawContent : Content-Length: 10276747 Content-Type: application/octet-stream { "764411904": { "abbrName": "SF", "awayLosses": 1, "awayTies": 0, "awayWins": 0, "calen... Headers : {[Content-Length, 10276747], [Content-Type, application/octet-stream]} RawContentLength : 10276747
但执行ConvertFrom-Json后没有返回任何记录,我的脚本是这样的:
$request = 'C:\Users\mcmon\Desktop\Projects\Madden Exports\teams-42e.json' Invoke-WebRequest $request | ConvertFrom-Json | select abbrName
原因分析
从你提供的JSON结构能看出来,这份数据的顶层是一个以球队ID为键的对象集合,而不是直接包含球队属性的数组或单个对象。直接用select abbrName的话,顶层对象并没有这个属性,所以自然返回空结果。另外,处理本地JSON文件用Invoke-WebRequest其实没必要,用Get-Content更直接高效。
解决方案
修改脚本如下,先读取文件内容转成JSON对象,再提取所有球队对象的集合,最后选择需要的属性:
$jsonPath = 'C:\Users\mcmon\Desktop\Projects\Madden Exports\teams-42e.json' (Get-Content $jsonPath -Raw) | ConvertFrom-Json | Select-Object -ExpandProperty Values | Select-Object abbrName
解释一下:
Get-Content -Raw:一次性读取整个JSON文件的内容,避免逐行读取导致的JSON解析错误Select-Object -ExpandProperty Values:提取顶层对象里所有的球队对象(也就是每个ID对应的内容),把它们转成一个集合- 最后
Select-Object abbrName就能正常获取到所有球队的缩写名称了
内容的提问来源于stack exchange,提问作者jDave1984
相关产品推荐
相关产品推荐

