如何修改JSON格式使PowerShell将其导入为扁平PsCustom对象?
问题:调整JSON格式使PowerShell直接生成扁平的PsCustom对象
我有一个JSON文件,内容如下:
{ "PID": [ 18988, 23928, 16656 ], "Process": [ "pwsh.exe", "pwsh.exe", "WindowsTerminal.exe" ], "WinID": [ "0x1117b6", "0x130042", "0x600848" ] }
使用Get-Content -Path c:\temp\MyJson.json|ConvertFrom-Json命令后,得到的是嵌套对象:
PID Process WinID --- ------- ----- {18988, 23928, 16656} {pwsh.exe, pwsh.exe, WindowsTerminal.exe} {0x1117b6, 0x130042, 0x600848}
我期望得到扁平结构:
PID Process WinID --- ------- ----- 18988 pwsh.exe 0x1117b6 23928 pwsh.exe 0x130042 16656 WindowsTerminal.exe 0x600848
希望通过调整JSON格式而非PowerShell后续处理来解决问题,请求提供适配PowerShell的正确JSON格式。
解决方案
你需要将JSON结构从「键对应数组」的格式,改为「数组包含单个对象」的格式,每个对象对应一行数据。这样ConvertFrom-Json会直接解析为多个扁平的PsCustom对象,输出就是你要的表格结构。
正确的JSON格式如下:
[ { "PID": 18988, "Process": "pwsh.exe", "WinID": "0x1117b6" }, { "PID": 23928, "Process": "pwsh.exe", "WinID": "0x130042" }, { "PID": 16656, "Process": "WindowsTerminal.exe", "WinID": "0x600848" } ]
验证效果
执行原命令Get-Content -Path c:\temp\MyJson.json | ConvertFrom-Json后,输出会直接是你期望的扁平表格:
PID Process WinID --- ------- ----- 18988 pwsh.exe 0x1117b6 23928 pwsh.exe 0x130042 16656 WindowsTerminal.exe 0x600848
原理说明
原来的JSON结构是一个顶层对象,每个属性都是数组,ConvertFrom-Json会将其解析为一个包含三个数组属性的单个对象。而修改后的结构是一个JSON数组,每个元素是包含三个属性的独立对象,ConvertFrom-Json会将每个元素解析为单独的PsCustom对象,PowerShell默认会以表格形式展示这些对象,正好符合你的需求。
内容的提问来源于stack exchange,提问作者Ralf_Reddings
相关产品推荐
相关产品推荐

