
如果您在Windows系统中需要对JSON格式的数据进行解析或生成,PowerShell提供了原生支持的ConvertFrom-Json和ConvertTo-Json命令。以下是具体操作步骤:
一、使用ConvertFrom-Json解析JSON字符串
ConvertFrom-Json将JSON格式的字符串转换为PowerShell中的对象(如PSCustomObject),便于后续属性访问和数据处理。该命令要求输入为合法JSON语法,不支持尾随逗号或单引号包裹的键名。
1、打开PowerShell(管理员权限非必需,普通用户即可)。
2、输入以下命令将JSON字符串解析为对象:$jsonString = ‘{“name”:”Alice”,”age”:30,”city”:”Beijing”}’; $obj = $jsonString | ConvertFrom-Json
3、通过点号访问属性:$obj.name 返回 Alice,$obj.age 返回 30。
4、若JSON为数组格式,解析后可使用索引访问:$arrayJson = ‘[{“id”:1},{“id”:2}]’ | ConvertFrom-Json; $arrayJson[0].id
二、从文件读取JSON并解析
当JSON数据存储在本地文件中时,可结合Get-Content与ConvertFrom-Json完成解析,需确保文件编码为UTF-8且无BOM,否则可能引发解析错误。
1、确认JSON文件路径,例如C:\data\config.json,内容为:{“server”:”prod.example.com”,”port”:443,”enabled”:true}
2、执行命令读取并解析:$config = Get-Content “C:\data\config.json” -Raw | ConvertFrom-Json
3、验证解析结果:$config.server 输出 prod.example.com,$config.enabled 输出 True。
三、使用ConvertTo-Json生成JSON字符串
ConvertTo-Json将PowerShell对象序列化为JSON字符串,默认深度为2,嵌套层级超过时会截断属性;如需完整输出,必须显式指定Depth参数。
1、创建一个哈希表对象:$data = @{name=’Bob’; scores=@(85,92,78); active=$true}
2、转换为JSON(默认Depth=2,可能丢失深层结构):$data | ConvertTo-Json
3、确保完整保留嵌套结构:$data | ConvertTo-Json -Depth 10
4、将结果保存到文件:$data | ConvertTo-Json -Depth 10 | Set-Content “C:\output\result.json” -Encoding UTF8
四、处理带特殊字符或中文的JSON
PowerShell 5.1及以上版本默认支持UTF-8,但若JSON源含中文且未声明UTF-8编码,解析时可能出现乱码;此时需强制指定输入流编码,并避免使用Get-Content的默认ANSI行为。
1、读取含中文的JSON文件(如含“城市”、“用户”等字段):$raw = [System.IO.File]::ReadAllText(“C:\data\chinese.json”, [System.Text.Encoding]::UTF8)
2、解析该字符串:$obj = $raw | ConvertFrom-Json
3、验证中文字段是否正确显示:$obj.城市 或 $obj.”城市”(使用引号包裹含中文或空格的属性名)。
五、在管道中组合解析与筛选操作
PowerShell支持将ConvertFrom-Json与其他Cmdlet链式调用,实现对JSON数组的过滤、排序和投影,无需中间变量。
1、定义含多个对象的JSON数组字符串:$list = ‘[{“name”:”Tom”,”score”:88},{“name”:”Jerry”,”score”:95},{“name”:”Anna”,”score”:82}]’
2、解析后筛选分数大于85的对象:$list | ConvertFrom-Json | Where-Object {$_.score -gt 85}
3、仅提取姓名并转为大写:$list | ConvertFrom-Json | ForEach-Object {$_.name.ToUpper()}
4、导出符合条件的对象为新JSON文件:$list | ConvertFrom-Json | Where-Object {$_.score -gt 85} | ConvertTo-Json -Depth 10 | Set-Content “C:\filtered.json”

评论(0)