使用Hash #fetch优雅地处理错误的JSON

时间:2014-08-07 23:01:50

标签: ruby-on-rails ruby json hash error-handling

我正在尝试从这个JSON API中获取一些产品,以便我可以在我的视图中显示它们,如果我得到nil,使用Hash#fetch优雅地处理错误的JSON来声明默认值。

但为什么我会:

can't convert String into Integer

或者如果我将@json_text设置为{}

undefined method 'fetch' for `nil:NilClass`

直播应用:http://runnable.com/U-QEWAnEtDZTdI_g/gracefully-handle-bad-json

class MainController < ApplicationController
  require 'hashie'

  def index
    @json_text = <<END
{
    "products": []
}
END

    hashes = JSON.parse(@json_text)
    mashes = Hashie::Mash.new(hashes)

    products = []

    mashes.products.fetch('products', []).each do |mash|
      puts "YOLO"
    end
  end
end

1 个答案:

答案 0 :(得分:2)

正确的获取方式是在mashes变量上调用fetch

mashes.fetch('products', []).each do |mash|
  puts "YOLO"
end

#fetch是一种哈希方法,在这种情况下与mashes ['product']相同,除非productnil,使用fetch示例将返回[]