检查哈希表中是否有空值

5

我正在尝试从Twitter分析推文,其中一件我想包括的事情是位置信息。不幸的是,有些值为空,我一直收到错误提示。

undefined method `[]' for nil:NilClass (NoMethodError)

我希望您能运行一次检查,以查看值是否为空,但我无法使任何内容正常工作。
如果输入为空,则会显示如下内容。
tweet = {"metadata"=> {"geo"=>nil}}

如果它有值,那么就是这样

tweet = {"metadata"=> {"geo"=>{"coordinates"=>[0,1]}}

这是我尝试过的内容。
if "#{tweet['metadata']['geo']}".nil? == true
  puts("nil")
else
  puts("#{tweet['metadata']['geo']['coordinates']}"
end

我注意到它只是检查geo是否为空,因为如果我将if语句更改为等于false,它会输出“nil”。我不确定还能用什么方式进行检查。
4个回答

3

我认为问题可能在于你在字符串中插入了哈希值,这将把nil转换为空字符串,但实际上并不是nil。

可以尝试如下方式:

if tweet['metadata']['geo'].nil?
  puts("nil")
else
  puts("#{tweet['metadata']['geo']['coordinates']}")
end

好的,就这样吧。非常感谢你。 - nickg

3

2

使用present?方法来检查nilblank。请查看以下代码。

if tweet['metadata']['geo'].present?
  puts("nil")
else
  puts("#{tweet['metadata']['geo']['coordinates']}")
end

0

如果有人偶然发现这篇文章,我建议使用dig函数,它可以安全地返回nil值,以防键不存在。

tweet = { "metadata" => { "geo"=> { "coordinates" => [0, 1] } } }
tweet.dig("metadata", "geo", "coordinates")
=> [0, 1]

missing_tweet = { "metadata" => { "geo" => nil } }
missing_tweet.dig("metadata", "geo", "coordinates")
=> nil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接