1

我注意到 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"}

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

哪个组件在做这项工作,为什么?

4

1 回答 1

5

我发现第一行ActiveModel::Serializers::JSON#as_json调用ActiveModel::Serialization#serializable_hash,其中有这行代码对属性名称进行排序

attribute_names = attributes.keys.sort

这是对属性进行排序的地方。至于为什么要对它们进行排序,答案就不太清楚了。Josh Peek 早在 2009 年 7 月就以这种提交方式引入了排序,但提交评论只是“将 AMo JSON 序列化程序集成到 AR 中”。他没有说为什么他把电话加到.sort.

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

于 2013-02-11T16:51:34.957 回答