Hashのkeyやvalueが数値の時はintegerに変換するメソッド

  • 8
    いいね
  • 2
    コメント
この記事は最終更新日から1年以上が経過しています。

JSON.parseとかしてきたときに、全部Stringになってしまって困ったので。

def convert h
  new_hash = Hash.new

  h.each do |k, v|
    if v.class == Hash
      v = convert v
    end

    if k.class == String and k.match(/^[0-9]*$/)
      k = k.to_i
    end

    if v.class == String and v.match(/^[0-9]*$/)
      v = v.to_i
    end

    new_hash[k] = v
  end

  new_hash
end

new_hash返すところで、new_hash.symbolize_keyとかすると数値以外のkeyがsymbolになって良い感じ