If youâve ever scripted in Ruby before, youâve more than likely encountered deeply nested arrays and hashes. These nested structures often come from Rubyâs JSON parser, but Ruby itself doesnât have effective methods for dealing with them. Specifically, sorting these structures: the standard routine only shallow sorts the top layer instead of deeply sorting every nested array and hash that the structure contains. This issue became apparent in Cumulusâan open source project sponsored by Lucid Software. After being unable to find an adequate solution, a simple utility was made that deeply sorts nested structures. Although small, the utility was incredibly usefulâso it was made into a standalone Ruby Gem.
[
{
"name": "Steve",
"relatives": [
"Ray",
"Mark",
"Jeff",
"David"
]
},
{
"relatives": [
"Mary",
"Joe",
"Harry"
],
"name": "John"
}
]
require âdeepsortâ
require âjsonâ
result = JSON.parse(File.read("nasty.json")).deep_sort
puts JSON.pretty_generate(result)
[
{
"name": "John",
"relatives": [
"Harry",
"Joe",
"Mary"
]
},
{
"name": "Steve",
"relatives": [
"David",
"Jeff",
"Mark",
"Ray"
]
}
]
But waitâthe goodness doesn't stop there! The gem also includes in-place and configurable methods such as deep_sort!, deep_sort_by, and deep_sort_by!, similar to ruby's built-in sort!, sort_by, and sort_by!
gem install deepsort
The deepsort gem is Open Source (MIT license). Feel free to contribute, comment, or learn more on the project's GitHub page.
