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

Ruby中使用.dig查询嵌套哈希值返回空值问题排查

问题分析与解决方案

首先,dig方法本身确实是处理嵌套哈希的实用工具,但你的用法没匹配Reddit返回的JSON结构,这才是输出为空的核心原因。

我们先拆解下Reddit返回的数据结构:

  • 最外层是一个哈希,核心数据都包裹在"data"键下
  • "data"里的"children"是数组,每个元素对应一条独立评论
  • 每条评论的正文(body),存放在该元素的"data"子哈希中

你的原代码json.dig("children","data","body")有两个关键错误:

  1. 根哈希里没有直接的"children"键,它藏在"data"层级下面
  2. "children"是数组而非哈希,无法直接通过dig取后续键,必须遍历数组中的每个元素

修正后的代码

require 'net/http'
require 'json'

url = 'https://www.reddit.com/r/programming/comments.json?sort=top&t=all&limit=10'
uri = URI(url)
response = Net::HTTP.get(uri)
json = JSON.parse(response)

# 先定位到评论数组:从根data中取出children列表
comments_array = json.dig("data", "children")

# 遍历每条评论,提取并输出正文内容
comments_array.each do |comment_item|
  comment_body = comment_item.dig("data", "body")
  # 过滤空内容,只打印存在的评论正文
  puts comment_body if comment_body
end

为什么这样可行?

  • json.dig("data", "children")正确定位到评论数组,dig的优势是安全嵌套取值——如果某个层级不存在,会返回nil而非抛出异常,避免程序崩溃
  • 遍历数组中的每个comment_item,再用dig("data", "body")精准取出单条评论的正文
  • 增加if comment_body判断,能过滤掉被删除或无正文的异常评论

这样就能逐个输出抓取到的有效评论内容了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:09:47