【问题标题】:Check hash for nil values检查哈希值是否为 nil
【发布时间】:2013-07-06 05:50:12
【问题描述】:

我正在尝试分析来自 Twitter 的推文,而我想要包括的其中一件事是位置。不幸的是,有些值是 nil,我不断收到错误

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

我只想运行检查以查看该值是否为 nil,但我无法正常工作。

如果输入为 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 是否为空,因为如果我将 if 语句更改为等于 false,它会输出“nil”。我不确定如何检查

【问题讨论】:

    标签: ruby hash null


    【解决方案1】:

    使用 fetch on hash 是处理此类问题的更好方法。 以下指向另一个答案的链接显示了处理的优雅和精美。 Ruby - Access multidimensional hash and avoid access nil object

    【讨论】:

      【解决方案2】:

      使用present? 来检查nil 和blank。检查以下代码。

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

      【讨论】:

        【解决方案3】:

        我认为问题可能在于您在字符串中插入散列,这会将 nil 转换为空字符串,而实际上这不是 nil。

        试试:

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

        【讨论】:

        • 好吧。非常感谢
        猜你喜欢
        • 2016-10-29
        • 1970-01-01
        • 2017-04-28
        • 1970-01-01
        • 2011-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-06
        相关资源
        最近更新 更多