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

如何使用jq基于Keys过滤JSON?获取Okta IP范围us_cell_开头条目

如何用jq筛选以特定前缀开头的键对应的IP范围

没问题,我来帮你搞定这个jq过滤的需求!你要处理的是Okta的IP范围JSON文件,需要提取所有以us_cell_开头的键对应的ip_ranges——这确实和常见的按值过滤不太一样,我给你几个实用的方案,亲测有效!

核心思路

要针对JSON的键名做过滤,首先得用to_entries把顶层对象转换成键值对数组(每个元素是{"key": "键名", "value": "对应值"}),这样就能方便地对键名进行匹配筛选,之后再根据需要提取或重组数据。

具体命令示例

1. 提取所有us_cell_开头的IP范围并合并成一个数组

如果你只需要所有符合条件的IP列表,不需要保留对应的us_cell_键名,可以用这个命令:

curl https://s3.amazonaws.com/okta-ip-ranges/ip_ranges.json | jq '[to_entries[] | select(.key | startswith("us_cell_")) | .value.ip_ranges[]]'
  • 拆解说明:
    • to_entries[]:把顶层对象拆成一个个键值对条目
    • select(.key | startswith("us_cell_")):筛选键名以us_cell_开头的条目
    • .value.ip_ranges[]:提取每个条目中的ip_ranges数组元素
    • 外层的[]:把所有IP元素合并成一个大数组

2. 保留键名和对应的IP范围结构

如果你想保留us_cell_X作为键,对应的值是该单元格的IP范围数组,可以用这个命令:

curl https://s3.amazonaws.com/okta-ip-ranges/ip_ranges.json | jq 'to_entries[] | select(.key | startswith("us_cell_")) | {(.key): .value.ip_ranges}'
  • 拆解说明:{(.key): .value.ip_ranges}会动态生成以原键名为键、IP范围为值的对象

3. 重组为只包含符合条件的键值对的对象

如果你想要得到一个新的JSON对象,只保留us_cell_开头的键及其完整值(包括ip_ranges和其他可能的字段),可以用:

curl https://s3.amazonaws.com/okta-ip-ranges/ip_ranges.json | jq '[to_entries[] | select(.key | startswith("us_cell_"))] | from_entries'
  • 拆解说明:from_entries会把筛选后的键值对数组重新转换为JSON对象

补充小技巧

  • 如果需要更灵活的匹配,也可以用正则表达式替代startswith,比如test("^us_cell_")效果完全一致
  • 如果你已经把JSON文件下载到本地,把curl ...换成cat ip_ranges.json即可运行命令

内容的提问来源于stack exchange,提问作者SSh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 13:52:49