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

从API返回的JSON中提取唯一独立IP地址的技术求助

从API返回的JSON中提取去重的独立IP地址

需求说明

我通过API获取了多组如下格式的JSON数据:

{
    "status": "success",
    "result": [{
        "address_details": [{
                "address": "135.138.168.78",
                "serviceType": "go_gateway",
                "addressType": "active",
                "create_time": 1631879023,
                "allow_listed": false
            },
            {
                "address": "135.138.168.79",
                "serviceType": "gp_gateway",
                "addressType": "active",
                "create_time": 1631879023,
                "allow_listed": false
            }
        ],
        "zone": "Germany",
        "addresses": [
            "135.138.168.78",
            "135.138.168.79"
        ],
        "zone_subnet": [
            "137.183.192.0/18",
            "208.27.0.0/16",
            "34.3.0.0/16",
            "34.199.0.0/16",
            "66.59.192.0/19",
            "165.11.128.0/17",
            "135.138.0.0/16",
            "130.141.0.0/16",
            "165.185.0.0/16"
        ],
        "addresses_v6": [],
        "address_details_v6": []
    }]
}

需要从中提取独立的IP地址(排除子网段),且每个IP仅保留一次,期望输出格式为每行一个IP:

135.138.168.78
135.138.168.79

遇到的问题

  • 使用grep、awk结合正则提取时,要么输出包含重复IP,要么混入子网段,无法得到符合要求的结果。
  • 使用jq命令时多次报错:
    • 执行jq --raw-output '.addresses[]'提示Cannot iterate over null (null) exit status 5,添加?后无输出;
    • 尝试.result.addresses[]或.status.addresses[]提示Cannot index string with string "addresses" exit status 5。

解决方案

正确的jq命令写法

因为JSON结构中addresses嵌套在result数组的元素内,需先遍历result数组,再提取目标字段,同时结合系统命令去重:

# 从addresses字段提取并去重
jq --raw-output '.result[] | .addresses[]' your_file.json | sort -u

如果想依赖更底层的address_details字段提取(避免addresses字段缺失的情况),可以用:

jq --raw-output '.result[] | .address_details[].address' your_file.json | sort -u

命令解释

  1. .result[]:遍历顶层的result数组,取出数组内的每个对象;
  2. .addresses[]/.address_details[].address:提取对应字段下的所有IP地址;
  3. sort -u:对输出的IP进行排序并去重,确保每个IP仅出现一次。

如果担心字段可能不存在导致报错,可添加?做容错处理:

jq --raw-output '.result[]?.addresses[]?' your_file.json | sort -u

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 22:57:21