Check hash for nil values
Solution 1
I think the problem may be that you're interpolating the hash in the string, which is converting the nil into an empty string, which is not actually nil.
Try:
if tweet['metadata']['geo'].nil?
puts("nil")
else
puts("#{tweet['metadata']['geo']['coordinates']}")
end
Solution 2
Using fetch on hash is a better way to Handle this type of problems. The below link to another answer shows how elegantly and beautifully this is handled. Ruby - Access multidimensional hash and avoid access nil object
Solution 3
Use present?
which checks for nil
and blank
as well. Check with following code.
if tweet['metadata']['geo'].present?
puts("nil")
else
puts("#{tweet['metadata']['geo']['coordinates']}")
end
nickg
Updated on March 19, 2020Comments
-
nickg about 4 years
I'm trying to analyze tweets off of Twitter and one of the things I would like to include is the location. Unfortunately, some of the values are nil and I keep getting the error
undefined method `[]' for nil:NilClass (NoMethodError)
I would like to just run a check to see if the value is nil or not but I can't get anything to work.
The input would look like this if it is nil
tweet = {"metadata"=> {"geo"=>nil}}
and this if it has value
tweet = {"metadata"=> {"geo"=>{"coordinates"=>[0,1]}}
This is what I've tried
if "#{tweet['metadata']['geo']}".nil? == true puts("nil") else puts("#{tweet['metadata']['geo']['coordinates']}" end
What I've noticed is that it just checks to see if geo is empty because it outputs "nil" if I change the if statement to equal false. I'm not sure how else to check