我无法从带有国家代码的国家名称哈希数据结构中的 ruby on rails 中呈现 json 响应:{ "AF"=>"Afghanistan", "AL"=>"Albania", "DZ"=> "Algeria", ... },因此 json 响应的条目按字母顺序排列,如下所示:
{ "AF":"阿富汗", "AL":"阿尔巴尼亚", "DZ"=>"阿尔及利亚" ... }
据我了解,问题在于 ruby 哈希本身没有顺序概念。所以响应是完全随机的。
谢谢你的帮助!
马丁
我无法从带有国家代码的国家名称哈希数据结构中的 ruby on rails 中呈现 json 响应:{ "AF"=>"Afghanistan", "AL"=>"Albania", "DZ"=> "Algeria", ... },因此 json 响应的条目按字母顺序排列,如下所示:
{ "AF":"阿富汗", "AL":"阿尔巴尼亚", "DZ"=>"阿尔及利亚" ... }
据我了解,问题在于 ruby 哈希本身没有顺序概念。所以响应是完全随机的。
谢谢你的帮助!
马丁
您可以使用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
感谢之前的答案(-> 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。非常感谢!
一个哈希数组怎么样:
[{ "AF"=>"Afghanistan"}, {"AL"=>"Albania"}, {"DZ"=>"Algeria"}, ... ]