You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell中如何实现WHERE子句筛选API返回数据?

PowerShell中修正API数据筛选逻辑的方法

错误原因分析

你的筛选语句无效主要有三个问题:

  1. PowerShell里的筛选必须用Where-Object(可简写Where),且筛选条件要放在大括号{}包裹的脚本块中
  2. PowerShell的相等比较运算符是-eq,不是=(=是赋值用的)
  3. 管道顺序错误:应该先筛选符合条件的对象,再选择需要的属性(先筛选能减少后续处理的数据量)

修正后的筛选语句

正确的筛选逻辑应该是先过滤出名称为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:15:12