2

我无法从带有国家代码的国家名称哈希数据结构中的 ruby​​ on rails 中呈现 json 响应:{ "AF"=>"Afghanistan", "AL"=>"Albania", "DZ"=> "Algeria", ... },因此 json 响应的条目按字母顺序排列,如下所示:

{ "AF":"阿富汗", "AL":"阿尔巴尼亚", "DZ"=>"阿尔及利亚" ... }

据我了解,问题在于 ruby​​ 哈希本身没有顺序概念。所以响应是完全随机的。

谢谢你的帮助!

马丁

4

3 回答 3

4

您可以使用ActiveSupport::OrderedHash

示例案例:

hash = ActiveSupport::OrderedHash.new
hash["one"] = "one"
hash["two"] = "two"
hash["three"] = "three"
p hash            # Will give you the hash in reverse order
p hash.to_json    # Will give you a json with the ordered hash
于 2010-02-10T02:49:05.570 回答
0

感谢之前的答案(-> westoque),我最终在 rails initializers 文件夹中对哈希类进行了猴子补丁,如下所示:

class Hash
 def to_inverted_ordered_hash
  copy = self.dup.invert.sort
  copy.inject(ActiveSupport::OrderedHash.new) {|hash, i|  hash[i[1]] =  i[0]; hash}
 end

 def to_ordered_hash
  copy = self.dup.sort
  copy.inject(ActiveSupport::OrderedHash.new) {|hash, i|  hash[i[1]] =  i[0]; hash}
 end
end

并在从控制器渲染时调用 to_json。非常感谢!

于 2010-02-10T04:41:49.650 回答
0

一个哈希数组怎么样:

[{ "AF"=>"Afghanistan"}, {"AL"=>"Albania"}, {"DZ"=>"Algeria"}, ... ]
于 2010-02-10T02:42:38.997 回答