Techioz Blog

ハッシュのキーをキャメルケースに変換する

概要

ハッシュ = {test_user: ‘1’、user_details: {first_name: “テスト”}}

出力 = {testUser: ‘1’、userDetails: {firstName: “Test”}}

プログラム:

  new_hash = {}
  if hash.values.map{|x| x.class}.include?(Hash)
    hash.each do |k,v|
      if v.class == Hash
        new_hash[k.to_s.upcase] = hash.transform_keys{ |key| key.to_s.upcase }
      else
        new_hash[k.to_s.upcase] = v
      end
    end
   puts new_hash
  end

次のような出力が得られます。

{"TEST_USER"=>"1", "USER_DETAILS"=>{"TEST_USER"=>"1", "USER_DETAILS"=>{:first_name=>"Test"}}}

誰かが正しい出力を得るのを手伝ってくれませんか。

解決策

Ruby on Rails には、深くネストされたハッシュのキーを変換するメソッドが組み込まれています。

次のように、その Hash#deep_transform_keys を String#camelize と組み合わせて使用できます。

hash = { test_user: '1', user_details: { first_name: "Test" }}

hash.deep_transform_keys { |key| key.to_s.camelize(:lower).to_sym }
#=> { :testUser => "1", :userDetails => { :firstName=>"Test" }}

Camelize を呼び出す前に、to_s を使用してシンボル化されたキーを文字列に変換し、to_sym を使用してシンボルに戻す必要があることに注意してください。