【问题标题】:Arrange json output by date按日期排列 json 输出
【发布时间】:2015-12-05 10:53:26
【问题描述】:

我想改变一个请求的 JSON 输出,现在它是按记录创建时间排列的,

{"id":1,"title":"The Town","release_date":"2010-10-21","image":"/zX4fKmDXKGt4hlzhAJirdlRKFgO.jpg","user_id":null,"created_at":"2015-12-04T19:57:58.449Z","updated_at":"2015-12-04T19:57:58.449Z","movie_id":"23168","imdb_rating":"7.6"},
{"id":2,"title":"Interstellar","release_date":"2014-11-06","image":"/nBNZadXqJSdt05SHLqgT0HuC5Gm.jpg","user_id":null,"created_at":"2015-12-04T19:58:16.600Z","updated_at":"2015-12-04T19:58:16.600Z","movie_id":"157336","imdb_rating":"8.7"},
{"id":3,"title":"Django Unchained","release_date":"2013-01-16","image":"/5WJnxuw41sddupf8cwOxYftuvJG.jpg","user_id":null,"created_at":"2015-12-04T20:00:22.411Z","updated_at":"2015-12-04T20:00:22.411Z","movie_id":"68718","imdb_rating":"8.5"},
{"id":4,"title":"Moonrise Kingdom","release_date":"2012-05-30","image":"/uw88gWDC0W7AAEhMeQmtdXFV7yR.jpg","user_id":null,"created_at":"2015-12-04T20:00:41.054Z","updated_at":"2015-12-04T20:00:41.054Z","movie_id":"83666","imdb_rating":"7.8"},
{"id":5,"title":"Gone Girl","release_date":"2014-10-01","image":"/gdiLTof3rbPDAmPaCf4g6op46bj.jpg","user_id":null,"created_at":"2015-12-05T09:05:08.424Z","updated_at":"2015-12-05T09:05:08.424Z","movie_id":"210577","imdb_rating":"8.2"}

但我想按发布日期排列数据,所以它看起来像这样,

{"id":1,"title":"The Town","release_date":"2010-10-21","image":"/zX4fKmDXKGt4hlzhAJirdlRKFgO.jpg","user_id":null,"created_at":"2015-12-04T19:57:58.449Z","updated_at":"2015-12-04T19:57:58.449Z","movie_id":"23168","imdb_rating":"7.6"},
{"id":4,"title":"Moonrise Kingdom","release_date":"2012-05-30","image":"/uw88gWDC0W7AAEhMeQmtdXFV7yR.jpg","user_id":null,"created_at":"2015-12-04T20:00:41.054Z","updated_at":"2015-12-04T20:00:41.054Z","movie_id":"83666","imdb_rating":"7.8"},
{"id":3,"title":"Django Unchained","release_date":"2013-01-16","image":"/5WJnxuw41sddupf8cwOxYftuvJG.jpg","user_id":null,"created_at":"2015-12-04T20:00:22.411Z","updated_at":"2015-12-04T20:00:22.411Z","movie_id":"68718","imdb_rating":"8.5"},
{"id":5,"title":"Gone Girl","release_date":"2014-10-01","image":"/gdiLTof3rbPDAmPaCf4g6op46bj.jpg","user_id":null,"created_at":"2015-12-05T09:05:08.424Z","updated_at":"2015-12-05T09:05:08.424Z","movie_id":"210577","imdb_rating":"8.2"}
{"id":2,"title":"Interstellar","release_date":"2014-11-06","image":"/nBNZadXqJSdt05SHLqgT0HuC5Gm.jpg","user_id":null,"created_at":"2015-12-04T19:58:16.600Z","updated_at":"2015-12-04T19:58:16.600Z","movie_id":"157336","imdb_rating":"8.7"},

使用 Ruby on Rails 可以做到这一点吗?

* 编辑 *

我使用上述 JSON 数据将其放入名为 movies 的 $scope 中。然后我使用 ng-repeat 输出数据。我不能在重复中使用orderBy,因为我将我的项目放在行中。但我认为如果我更改 $scope.movies 中的顺序并使用 javascript 重新排列顺序,它也会起作用。

【问题讨论】:

    标签: javascript ruby-on-rails json


    【解决方案1】:

    假设你正在处理你可以使用的 json

    json_array.sort_by { |json| Time.parse(json['release_date']) }

    这里有 2 个注释:

    1. Time.parse 为每个项目在排序之前做一个开销(会更好)(但是对于小集合这不是问题)
    2. release_date 不是日期而是时间......这有点不合时宜。 ;)

    【讨论】:

    • 我不确定如何实现您的代码。它看起来像 javascript,但我希望有一个 Ruby on Rails 解决方案。如果是 JS 那我怎么用呢?
    • 它的 rails 代码 json_array 是您列出的项目数组。 sort_by 是一种适用于 ruby​​ 中所有数组的方法 (ruby-doc.org/core-2.2.0/Array.html)。一般来说,它需要所有项目并根据您传递给它的块的结果对数组进行排序。
    • 很抱歉,这让我有点过头了。第一个问题,代码是否进入movies_controller.rb文件,然后是索引定义?
    • 好的。假设您想将按 release_date 排序的项目传递给您的视图,您可以将其写入您的控制器@movies = json_array.sort_by { |json| Time.parse(json['release_date']) },而不是 json_array 放一个变量名称来保存 json 项目
    • 是的,可以这么想。但我使用 AngularJS 来处理数据。所以我在 RoR 中没有保留 json 项目的变量。也许我应该寻找一个 javascript 解决方案,并在我的 $scope 中安排对象的顺序。
    猜你喜欢
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多