Symbolize = (l = ->(h) { h.inject({}) { |m, (k,v)| m[(String === k ? k.to_sym : k)] = (Hash === v ? l.(v) : v); m }}) # Example: hash = { 'task' => { 'description' => 'Ab@ @example @cd', 'target' => { 'label' => 'cd' } } } Symbolize.(hash) # => { :task => { :description => "Ab@ @example @cd", :target => { :label => "cd" } } }