RubyでJSONを要素の順番によらず同一判定したい
RubyでJSONデータを各要素の順番によらず、同じ要素が含まれていれば(連想配列の場合はキーと値の組み合わせが同じであれば)同一と判定したいと思っています。
以下のようなコードを考えていますが、もっとシンプルなやり方があれば教えてください。 (目的は同一判定なのでソート以外のやり方でも構いません)
def json_sort(json)
# jsonから生成したRubyオブジェクトを再帰的にソートする
case json
when Array
# 配列の場合はソートし、json_sortを各要素に適用
json.sort.map{|v|json_sort(v)}
when Hash
# 連想配列の場合はキーでソートした上でjson_sortを各要素に適用
Hash[json.sort.map{|(k,v)|[k, json_sort(v)]}]
else; json
end
end
a = JSON.parse('{"a": 1, "b": [1, 2]}')
b = JSON.parse('{"b": [2, 1], "a": 1}')
json_sort(a) == json_sort(b) #=> 順番が違っても同一と判定したい