PowerShell中如何实现WHERE子句筛选API返回数据?
PowerShell中修正API数据筛选逻辑的方法
错误原因分析
你的筛选语句无效主要有三个问题:
- PowerShell里的筛选必须用
Where-Object(可简写Where),且筛选条件要放在大括号{}包裹的脚本块中 - PowerShell的相等比较运算符是
-eq,不是=(=是赋值用的) - 管道顺序错误:应该先筛选符合条件的对象,再选择需要的属性(先筛选能减少后续处理的数据量)
修正后的筛选语句
正确的筛选逻辑应该是先过滤出名称为Christmas Day的记录,再选择date和name属性,同时要把筛选结果赋值给变量,方便后续循环使用:
$filteredHolidays = $JSONResult | Where-Object { $_.name -eq 'Christmas Day' } | Select-Object date, name
完整修正代码
$Server = "TEST" $Database = "API_Test" $Conn = New-Object System.Data.SqlClient.SqlConnection("Server=$Server;Database=$Database;Integrated Security=True;") $Conn.Open() $cmd = $Conn.CreateCommand() $request = 'https://date.nager.at/api/v2/publicholidays/2020/US' $result = Invoke-WebRequest $request $JSONResult = $result | ConvertFrom-Json # 筛选出目标节日记录并保留指定属性 $filteredHolidays = $JSONResult | Where-Object { $_.name -eq 'Christmas Day' } | Select-Object date, name # 仅遍历筛选后的结果插入数据库 foreach ($obj in $filteredHolidays) { $cmd.CommandText = "INSERT test VALUES (@Date, @Name)" $cmd.Parameters.AddWithValue("@Date", $obj.date); $cmd.Parameters.AddWithValue("@Name", $obj.name); $cmd.ExecuteNonQuery() $cmd.Parameters.Clear(); } $conn.Close()
内容的提问来源于stack exchange,提问作者rjjh
相关产品推荐
相关产品推荐

