You need to enable JavaScript to run this app. 如何使用Powershell解析JSON文件并提取各字段值
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 11:15:04