ハッシュのキーをキャメルケースに変換する
概要
ハッシュ = {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 を使用してシンボルに戻す必要があることに注意してください。