如何使用Powershell解析JSON文件并提取各字段值
PowerShell 解析JSON文件提取字段的实现方案
核心思路
你生成JSON时用了ConvertTo-Json,对应的解析直接用PowerShell内置的ConvertFrom-Json cmdlet即可,所有同结构的JSON文件可以批量遍历解析,提取字段后直接对接SQL写入逻辑。
完整实现代码
步骤1:批量读取解析JSON文件
# 替换为你的JSON文件存储目录路径 $jsonFolderPath = "C:\JSON文件存储目录" # 读取目录下所有.json后缀的文件 $allJsonFiles = Get-ChildItem -Path $jsonFolderPath -Filter "*.json" -File foreach ($jsonFile in $allJsonFiles) { # 读取JSON原始内容并转换为PowerShell自定义对象 $incidentData = Get-Content -Path $jsonFile.FullName -Raw | ConvertFrom-Json # 遍历单文件内的所有工单数据,提取所需字段 foreach ($singleIncident in $incidentData) { # 以下字段名替换为你实际工单的字段名,可直接通过.属性名的方式取值 $incidentId = $singleIncident.Id $incidentTitle = $singleIncident.Title $assignGroup = $singleIncident.AssignedGroup $createTime = $singleIncident.CreatedDateTime $currentStatus = $singleIncident.Status $submitter = $singleIncident.Submitter # 此处直接插入你的SQL写入逻辑即可 } }
步骤2:安全写入SQL数据库(推荐参数化查询,避免SQL注入)
不需要额外安装模块的.NET原生写法示例:
# 替换为你的SQL连接字符串 $sqlConnStr = "Server=你的SQL实例地址;Database=你的数据库名;Integrated Security=True;" $conn = New-Object System.Data.SqlClient.SqlConnection($sqlConnStr) $conn.Open() foreach ($jsonFile in $allJsonFiles) { $incidentData = Get-Content -Path $jsonFile.FullName -Raw | ConvertFrom-Json foreach ($singleIncident in $incidentData) { $cmd = New-Object System.Data.SqlClient.SqlCommand $cmd.Connection = $conn # 表名和字段名替换为你实际的SQL表配置 $cmd.CommandText = @" INSERT INTO 工单表 (工单ID, 工单标题, 所属组别, 创建时间, 当前状态, 提交人) VALUES (@incidentId, @incidentTitle, @assignGroup, @createTime, @currentStatus, @submitter) "@ # 绑定参数,自动处理特殊字符和类型转换 $cmd.Parameters.AddWithValue("@incidentId", $singleIncident.Id) | Out-Null $cmd.Parameters.AddWithValue("@incidentTitle", $singleIncident.Title) | Out-Null $cmd.Parameters.AddWithValue("@assignGroup", $singleIncident.AssignedGroup) | Out-Null $cmd.Parameters.AddWithValue("@createTime", $singleIncident.CreatedDateTime) | Out-Null $cmd.Parameters.AddWithValue("@currentStatus", $singleIncident.Status) | Out-Null $cmd.Parameters.AddWithValue("@submitter", $singleIncident.Submitter) | Out-Null $cmd.ExecuteNonQuery() | Out-Null } } $conn.Close()
注意事项
- 如果你的工单有嵌套层级的字段,生成JSON时需要指定
-Depth参数避免层级截断,比如ConvertTo-Json -Depth 5,解析时不需要额外配置,ConvertFrom-Json会自动识别 - 如果你生成的JSON外层不是直接的工单数组,而是被其他对象包裹,解析后需要先取对应数组属性再遍历,比如
$incidentData = (Get-Content xxx | ConvertFrom-Json).Result - 字段名要和你
Get-Incidents返回的原始字段完全一致,你可以运行$incidentData | Get-Member查看所有可用字段名
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

