Использую JSONSimple.
Имею такой Json:
{
"2017-05-19": [{"time": "time"}],
"2017-05-18": [{"time": "time"}],
"2017-05-17": [{"time": "time"}],
"2017-05-16": [{"time": "time"}],
"2017-05-01": [{"time": "time"}],
"2017-05-05": [{"time": "time"}],
"2017-05-10": [{"time": "time"}],
"2017-06-18": [{"time": "time"}],
"2017-06-29": [{"time": "time"}],
"2017-06-16": [{"time": "time"}],
"2017-06-01": [{"time": "time"}],
"2017-06-06": [{"time": "time"}],
"2017-06-15": [{"time": "time"}]
}
Подскажите варианты сортировки такого объекта по ключу - дате. Что бы всё было в нормальном порядке, как должно быть.
UPD. Попробовал сделать так:
Map<Date, JSONArray> treeMap = new TreeMap<Date, JSONArray>(data);
JSONObject test = new JSONObject(treeMap);
не отсортировал.
JSONObject data = (JSONObject) new JSONParser().parse(new FileReader(request.getServletContext().getRealPath("")+ File.separator+"temp.json"));
List<UserRow> list = new ArrayList<>();
for(Object o: data.keySet()) {
list.add(new UserRow(o.toString(), (JSONArray) data.get(o)));
}
Collections.sort(list, new Comparator<UserRow>() {
@Override
public int compare(UserRow o1, UserRow o2) {
return o1.getDate().compareTo(o2.getDate());
}
});
JSONObject nData = new JSONObject();
for(UserRow u: list) {
nData.put(u.dateToString(), u.getTimes());
}
System.out.println(nData.toString());
Класс UserRow:
public class UserRow {
private Date date;
private JSONArray times;
private SimpleDateFormat fdate = new SimpleDateFormat("yyyy-MM-dd");
public UserRow(String date, JSONArray times) throws ParseException {
this.date = fdate.parse(date);
this.times = times;
}
public Date getDate() {
return date;
}
public JSONArray getTimes() {
return times;
}
public String dateToString() {
return fdate.format(getDate());
}
}
Я думаю распарсить такой Json не проблема, поэтому будем считать, что данные в строковом виде есть.
Каждую дату парсим с помощью SimpleDateFormat("yyyy-MM-dd") в объект Date. Время парсим так, как требуется по заданию.
Загоняем пары дата-время в List из структур, типа:
class MyDate {
Date date;
Time time; //Здесь тип `Time` - псевдотип. Реальный тип поля зависит от того, как Вы парсите время
}
Далее, как вариант, используем метод Collections.sort(List, Comparator). Где List - это наша коллекция, а Comparator - это реализация соответствующего интерфейса, в методе compareTo которого всего одна строка: return date1.compareTo(date2).
После этого список наших структур MyDate отсортирован по возрастанию Date.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости