windows怎么用powershell处理json数据_windows如何用convertfrom-json解析和生成json【技巧】

如果您在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”

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。