在Windows Shell中用JQ按子元素内容过滤JSON及Tor中继筛选
在Windows批处理中用jq过滤Tor中继共识数据的解决方案
我明白你在Windows批处理里用jq处理Onionoo数据时遇到的引号转义和过滤逻辑问题,这确实是Windows shell和Linux/bash的差异导致的小坑,下面给你一步步的解决方法:
准备工作
首先确保你已经下载了Windows版本的jq,可直接从官方渠道获取,你可以把它放到系统PATH目录里(比如C:\Windows\System32),或者在脚本里指定它的完整路径(比如C:\tools\jq.exe)。
方案1:直接在批处理中写过滤表达式(处理引号转义)
Windows批处理里双引号需要用两个双引号""来转义,所以我们的jq过滤逻辑要做相应调整。下面是完整的批处理脚本:
@echo off setlocal :: 定义输出文件路径 set "OUTPUT=tor_filtered_relays.json" :: 获取Onionoo数据并过滤:筛选Running状态且带Fast标记的中继,保留指定字段 curl -s https://onionoo.torproject.org/details ^ | jq "`.relays[] | select(.status==""Running"" and (.flags[] | contains(""Fast""))) | {nickname, fingerprint, address, or_port}`" ^ > %OUTPUT% echo 处理完成!结果已保存到 %OUTPUT% pause
逻辑解释:
.relays[]:遍历返回JSON里的所有中继条目select(.status==""Running"" and (.flags[] | contains(""Fast""))):筛选两个条件都满足的中继:- 状态为
Running - 标记数组中包含
Fast
- 状态为
{nickname, fingerprint, address, or_port}:只保留你需要的字段,生成精简版JSON
方案2:用外部jq脚本文件(避免引号转义麻烦)
如果觉得转义引号太麻烦,推荐把过滤逻辑写到单独的.jq文件里,这样更清晰易维护:
- 创建一个名为
tor_filter.jq的文件,内容如下:
.relays[] | select(.status == "Running" and (.flags[] | contains("Fast"))) | { nickname, fingerprint, address, or_port, dir_port # 可以根据需求添加/删除字段 }
- 然后写批处理脚本调用这个文件:
@echo off setlocal set "OUTPUT=tor_filtered_relays.json" set "JQ_SCRIPT=tor_filter.jq" :: 如果jq不在PATH里,替换成你的jq完整路径,比如 C:\tools\jq.exe curl -s https://onionoo.torproject.org/details | jq -f %JQ_SCRIPT% > %OUTPUT% echo 处理完成!结果已保存到 %OUTPUT% pause
替代方案:用PowerShell辅助(如果批处理限制多)
如果批处理的管道和引号问题还是困扰你,可以在批处理里调用PowerShell来处理,PowerShell对引号的处理更接近Linux:
@echo off setlocal set "OUTPUT=tor_filtered_relays.json" powershell -Command "(Invoke-WebRequest -Uri 'https://onionoo.torproject.org/details').Content | jq '.relays[] | select(.status=="Running" and (.flags[] | contains("Fast"))) | {nickname, fingerprint}' > %OUTPUT%" echo 处理完成!结果已保存到 %OUTPUT% pause
注意事项
- 如果你的系统没有自带
curl(Windows 10及以上默认有),可以用PowerShell的Invoke-WebRequest替代,就像上面的PowerShell方案那样。 - 可以根据自己的需求修改
{nickname, fingerprint,...}里的字段,比如添加bandwidth、country_code等,只需要参考Onionoo返回的JSON结构来调整。
内容的提问来源于stack exchange,提问作者cal
相关产品推荐
相关产品推荐

