我试图从Twitter上分析推文,我想要包含的其中一件事就是位置。不幸的是,有些值为零,我不断收到错误
undefined method `[]' for nil:NilClass (NoMethodError)
我想检查一下是否值为零,但我无法正常工作。
如果输入为nil
,则输入将如下所示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是否为空,因为它输出" nil"如果我将if语句更改为false。我不确定如何检查
答案 0 :(得分:3)
我认为问题可能是你在字符串中插入哈希,它将nil转换为空字符串,实际上并不是nil。
尝试:
if tweet['metadata']['geo'].nil?
puts("nil")
else
puts("#{tweet['metadata']['geo']['coordinates']}")
end
答案 1 :(得分:2)
在哈希上使用fetch是处理此类问题的更好方法。 下面链接到另一个答案显示这是如何优雅和美丽的处理。 Ruby - Access multidimensional hash and avoid access nil object
答案 2 :(得分:1)
使用present?
检查nil
和blank
。请查看以下代码。
if tweet['metadata']['geo'].present?
puts("nil")
else
puts("#{tweet['metadata']['geo']['coordinates']}")
end