我注意到 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 输出是按字母顺序排序的。
哪个组件正在执行这项工作以及为什么?
我发现第一行调用ActiveModel::Serializers::JSON#as_json有ActiveModel::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 中。