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

Ruby中如何从嵌套JSON响应中提取指定条件的IPv4地址

解决Ruby中解析JSON并查找指定条件父键的问题

嘿,刚接触Ruby的时候处理JSON确实容易摸不着头脑,我完全懂你卡在这里的感觉!咱们一步步来解决这个问题,不用那些拙劣的字符串截取方法,用Ruby的哈希方法就能优雅搞定。

首先,你得确保已经引入json库(Ruby默认不会自动加载它),然后把JSON字符串解析成Ruby的哈希对象,之后就可以用哈希的遍历方法来找目标键了。

方法一:找到第一个符合条件的父键

如果你的JSON里只会有一个family为inet的条目,用find方法最适合:

require 'json'

# 你的JSON响应字符串
json_str = '{ "00:00:00:CC:00:CC": { "family": "lladdr" }, "10.0.0.20": { "family": "inet", "prefixlen": "24", "netmask": "255.255.255.0", "broadcast": "10.0.0.255", "scope": "Global" }, "ff00::f00:00ff:fff0:00f0": { "family": "inet6", "prefixlen": "64", "scope": "Link", "tags": [] } }'

# 解析成Ruby哈希
parsed_data = JSON.parse(json_str)

# 遍历哈希,找到第一个family为inet的键
target_ip = parsed_data.find do |key, details|
  details["family"] == "inet"
end&.first

puts target_ip # 输出:10.0.0.20

这里的find会逐个检查哈希的键值对,返回第一个满足条件的[key, value]数组,我们用.first提取出对应的键。&.是安全导航操作符,万一没有找到匹配项,它会返回nil而不是抛出错误,很实用。

方法二:找到所有符合条件的父键

如果你的JSON里可能有多个family为inet的条目,用select方法可以把所有符合条件的键值对都筛选出来,再提取键:

# 筛选所有family为inet的键值对,再提取键
all_target_ips = parsed_data.select do |key, details|
  details["family"] == "inet"
end.keys

puts all_target_ips # 输出:["10.0.0.20"]

这种方法完全基于JSON的结构来查找,不管键值在JSON里的顺序怎么变,都能准确找到目标,比字符串截取靠谱太多啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:33:58