Skip to content

Instantly share code, notes, and snippets.

@angelfan
Forked from mkuhnt/stringify_keys.rb
Created July 28, 2016 10:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save angelfan/10c8abd4302d794fae0bf963e8d79310 to your computer and use it in GitHub Desktop.
Save angelfan/10c8abd4302d794fae0bf963e8d79310 to your computer and use it in GitHub Desktop.
Deep Stringify Keys of hash even with embedded arrays
def transform_hash(original, options={}, &block)
original.inject({}){|result, (key,value)|
value = if (options[:deep] && Hash === value)
transform_hash(value, options, &block)
else
if Array === value
value.map{|v| transform_hash(v, options, &block)}
else
value
end
end
block.call(result,key,value)
result
}
end
# Convert keys to strings
def stringify_keys(hash)
transform_hash(hash) {|hash, key, value|
hash[key.to_s] = value
}
end
# Convert keys to strings, recursively
def deep_stringify_keys(hash)
transform_hash(hash, :deep => true) {|hash, key, value|
hash[key.to_s] = value
}
end
h1 = {a: {b: "c", d: [{a: "test", b: "test 2"},{a: "test 3"}]}}
puts h1
puts stringify_keys(h1)
puts deep_stringify_keys(h1)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment