按Json对象中的某些字段排序

use*_*143 2 java sorting json

我有一个包含对象数组的Josn文件,例如:

{
    "tId": "Something",
    "StartTime": "05/29/2013 5:28:33 PM",
    "CompleteTime": "05/29/2013 5:28:33 PM",
    "Status": "success",
    "MachineName": "Machine",
},
Run Code Online (Sandbox Code Playgroud)

我必须根据开始时间和机器名称进行排序,并仅向用户显示这两件事.如果2个或更多任务的开始时间相同,那么应根据机器名称对这些任务的结果进行排序.我试图将解析后得到的JsonArray转换为List并在此之后使用自定义collections.sort.我正朝着正确的方向前进吗?如果在相同的开始时间内如何修改Collections.sort中的比较器以根据机器名称进行排序

  JsonArray allTasks = jsonParser.parse(reader).getAsJsonArray();

  ArrayList<String> list = new ArrayList<String>();

  if (allTasks != null) { 
     int len = allTasks.size();
     for (int i=0;i<len;i++){ 
      list.add(allTasks .get(i).toString());
     } 
  }
  for (String task : list) {
    // code to fetch just 2 fields from this task and then sort according to start time
  }
Run Code Online (Sandbox Code Playgroud)

mae*_*ics 7

您的排序例程看起来像这样,具体取决于您如何进行JSON/Object映射的具体情况:

Collections.sort(myObjectList, new Comparator<MyObject>() {
  @Override
  int compare(MyObject a, MyObject b) {
    if (a.getStartTime().equals(b.getStartTime())) {
      return a.getMachineName().compare(b.getMachineName());
    } else {
      return a.getStartTime().compare(b.getStartTime());
    }
  }
});
Run Code Online (Sandbox Code Playgroud)


Bob*_*der 6

您应该创建一个类MyObject来保存一个对象的数据(tId,startTime,completeTime,status,machineName).

然后,分析每个JsonObjectMyObject并把它添加到List<MyObject>.

然后,使用Collections.sort()和比较器对列表进行排序.