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_atupdated_at持っているようで、おそらく互いに隣り合っているはずです。ただし、Railsの出力はアルファベット順にソートされています。

どのコンポーネントがこの作業を行っていますか、またその理由は何ですか?

4

1 に答える 1

5

ActiveModel::Serializers::JSON#as_json呼び出しの最初の行には、属性名を並べ替える次のコード行がActiveModel::Serialization#serializable_hash含まれていることがわかりました。

attribute_names = attributes.keys.sort

ここで属性がソートされます。それらがソートされる理由については、答えはあまり明確ではありません。Josh Peekは、2009年7月にこのコミット方法でソートを導入しましたが、コミットコメントは単に「AMoJSONシリアライザーをARに統合する」でした。彼はなぜ彼がに呼び出しを追加したのかを言いませんでした.sort

しかし、この種の方法が気に入らない場合は、Rails4がリリースされたときにアップグレードする意思がある限り幸運です。Railsのコアチームは、JSONキーを並べ替えてはいけないことに同意しているようです。2012年3月、彼らはへの呼び出しが削除されたこのプルリクエストを受け入れsortました。このコミットは最新のRails3.2にはありませんが、間もなくリリースされるRails4に含まれる予定です。

于 2013-02-11T16:51:34.957 に答える