哪个组件正在对 Rails JSON 响应中的 JSON 值进行排序?为什么?

Moh*_*sen 1 ruby-on-rails-3

我注意到 Rails JSON 输出是按字母顺序排序的。

这是基本 Rails 应用程序的 JSON 输出示例:

{"created_at":"2013-02-03T19:44:39Z","email":"mohsen@example.com","id":2,"name":"Mohsen","updated_at":"2013-02-03T19:44:39Z"}
Run Code Online (Sandbox Code Playgroud)

它似乎created_at具有updated_at相同的起源,并且可能应该彼此相邻。但 Rails 输出是按字母顺序排序的。

哪个组件正在执行这项工作以及为什么?

Bri*_*rty 5

我发现第一行调用ActiveModel::Serializers::JSON#as_jsonActiveModel::Serialization#serializable_hash行代码对属性名称进行排序

attribute_names = attributes.keys.sort
Run Code Online (Sandbox Code Playgroud)

这是属性排序的地方。至于为什么要排序,答案不太清楚。Josh Peek 早在 2009 年 7 月就在此提交方式中引入了该排序,但提交评论只是“将 AMo JSON 序列化器集成到 AR 中”。他没有说明为什么将通话添加到.sort

但如果您不喜欢这种类型,只要您愿意在 Rails 4 发布时升级到它,您就很幸运了。Rails 核心团队似乎同意 JSON 键不应该被排序。2012 年 3 月,他们接受了这个 Pull 请求,其中对 的调用sort被删除。此提交不在最新的 Rails 3.2 中,但将在即将推出的 Rails 4 中。