【问题标题】:Sort JsonArray of JsonObjects Java对 JsonObjects Java 的 JsonArray 进行排序
【发布时间】:2014-04-16 19:24:53
【问题描述】:

我正在使用 Gson 库。我需要根据 JsonObjects 中的键对 JsonObjects 的 JsonArray 进行排序。JsonArray 如下所示

[{"AS1000":["5.1","0","false","false",null,null],"AS2000":["-","-","-","-","-","-"],"Date":"2014-03-02 08:07:00.0"},
{"AS1000":["5.0","0","false","false",null,null],"AS2000":["-","-","-","-","-","-"],"Date":"2014-03-02 17:58:00.0"},
{"AS1000":["5.0","0","false","false",null,null],"AS2000":["-","-","-","-","-","-"],"Date":"2014-03-30 14:59:00.0"},
{"AS1000":["-","-","-","-","-","-"],"AS2000":["27.0","0","true","false","30.0 - 20.0",null],"Date":"2014-03-30 06:03:00.0"},
{"AS1000":["-","-","-","-","-","-"],"AS2000":["15.0","0","false","false",null,null],"Date":"2014-03-02 02:00:00.0"},
{"AS1000":["5.0","0","false","false",null,null],"AS2000":["-","-","-","-","-","-"],"Date":"2014-03-14 20:06:00.0"},
{"AS1000":["5.0","0","false","false",null,null],"AS2000":["-","-","-","-","-","-"],"Date":"2014-03-30 07:00:00.0"},
{"AS1000":["-","-","-","-","-","-"],"AS2000":["61.0","0","false","false",null,null],"Date":"2014-03-17 19:07:59.0"}]

是否可以根据对象中的键进行排序,例如 AS2000[0] 或日期?

我试过这样的恩赐

        JsonArray listLoggerDataObj=gson.fromJson(listloggerdata, JsonArray.class);
        List<JsonObject> list=new ArrayList<JsonObject>();
         for (JsonElement entry : listLoggerDataObj) {
         list.add(entry.getAsJsonObject());
         }


        sort(list,"Date"); /*list ,key used to sort*/
        System.out.println("printing sorted" +list.toString());

但它打印相同的输入。有什么想法吗?

谢谢,

高调

【问题讨论】:

  • 你能分享一下 sort(...) 方法吗?我认为你的问题。
  • 将 Collections.sort 与自定义比较器一起使用。
  • @veysiertekin sort 是 boon 库的一部分

标签: java json spring spring-mvc gson


【解决方案1】:

找到了解决办法。用Boon的jsonParser从string(不是Gson的fromJson())构造Json,然后投进List,最后应用sort(),问题修复。

  Object jsonObject = fromJson(listloggerdata);
  List<?> jsonDepartments = (List<?>) jsonObject;

  sort(jsonDepartments,sortBy("Date"));

  System.out.println("printing sorted" +jsonDepartments.toString());

排序后的结果是

[{"AS2000":["15.0","0","false","false",null,null],"AS1000":["-","-","-","-","-","-"],"Date":"2014-03-02 02:00:00.0"},
 {"AS2000":["-","-","-","-","-","-"],"AS1000":["5.1","0","false","false",null,null],"Date":"2014-03-02 08:07:00.0"},
 {"AS2000":["-","-","-","-","-","-"],"AS1000":["5.0","0","false","false",null,null],"Date":"2014-03-02 17:58:00.0"},
 {"AS2000":["-","-","-","-","-","-"],"AS1000":["5.0","0","false","false",null,null],"Date":"2014-03-14 20:06:00.0"},
 {"AS2000":["61.0","0","false","false",null,null],"AS1000":["-","-","-","-","-","-"],"Date":"2014-03-17 19:07:59.0"},
 {"AS2000":["27.0","0","true","false","30.0 - 20.0",null],"AS1000":["-","-","-","-","-","-"],"Date":"2014-03-30 06:03:00.0"},
 {"AS2000":["-","-","-","-","-","-"],"AS1000":["5.0","0","false","false",null,null],"Date":"2014-03-30 07:00:00.0"},
 {"AS2000":["-","-","-","-","-","-"],"AS1000":["5.0","0","false","false",null,null],"Date":"2014-03-30 14:59:00.0"}]

你甚至可以像这样根据数组索引进行排序

 sort(jsonDepartments,sortByDesending("AS2000[0]"));

希望这可能对某人有所帮助。

【讨论】:

  • 知道如何使用 Gson 的 fromJson() 来做到这一点吗?
【解决方案2】:

我也使用过 Boon 库,但出现错误“java.lang.NoClassDefFoundError org.boon.sort.Sort”

如果我做错了什么,请告诉我。

            this.list = global.getPartyPartneruserlistwithstatus().getJSONObject(0).getJSONArray("in_list");


            List<JSONObject> list1 = new ArrayList<JSONObject>();
            for (int i = 0; i < global.getPartyPartneruserlistwithstatus().getJSONObject(0).getJSONArray("in_list").length(); i++) {
                    list1.add(list.getJSONObject(i));
            }

                sort(list1,"age");

并且列表中包含 JSONARRAY

[ { "用户名": "Navdeep Singh Sandhu", “家乡”:“昌迪加尔”, "request_id": "2", “social_id”:“100002878462251”, “social_provider”:“facebook”, “年龄”:25 }, { "用户名": "HarPreet Kaur", “家乡”:“昌迪加尔”, "request_id": "4", "social_id": "100002029425217", “social_provider”:“facebook”, “年龄”:23 }]

【讨论】:

    猜你喜欢
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多