Gson List<HashMap<String,HashMap<String,String>>>

240
22 декабря 2017, 01:38

Существует JSON

{"2":{"sessions":[{"time":"13:00","price":"410"},{"time":"06:40","price":"340"},{"time":"16:50","price":"370"}],"name":"\u041a\u0438\u043d\u043e\u043a\u0438\u0441-L","locate":"\u041c\u043e\u0441\u043a\u0432\u0430, \u0421\u0430\u0434\u043e\u0432\u0430\u044f-\u0421\u043f\u0430\u0441\u0441\u043a\u0430\u044f \u0443\u043b., 21, 56","metro":"\u041a\u0440\u0430\u0441\u043d\u044b\u0435 \u0432\u043e\u0440\u043e\u0442\u0430"},"7":{"sessions":[{"time":"06:35","price":"190"},{"time":"00:05","price":"410"}],"name":"\u041a\u0438\u043d\u043e\u043a\u0438\u0441-V","locate":"\u041f\u0430\u0432\u0435\u043b\u0435\u0446\u043a\u0430\u044f \u043f\u043b., 2, \u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 1","metro":"\u041f\u0430\u0432\u0435\u043b\u0435\u0446\u043a\u0430\u044f"},"8":{"sessions":[{"time":"15:10","price":"330"}],"name":"\u041a\u0438\u043d\u043e\u043a\u0438\u0441-J","locate":"\u0443\u043b. \u041f\u0440\u0435\u0447\u0438\u0441\u0442\u0435\u043d\u043a\u0430, 40\/2","metro":"\u041a\u0440\u043e\u043f\u043e\u0442\u043a\u0438\u043d\u0441\u043a\u0430\u044f"},"9":{"sessions":[{"time":"13:00","price":"600"},{"time":"08:30","price":"300"},{"time":"04:00","price":"510"},{"time":"13:15","price":"340"}],"name":"\u041a\u0438\u043d\u043e\u043a\u0438\u0441-U","locate":"\u0428\u0430\u0440\u0438\u043a\u043e\u043f\u043e\u0434\u0448\u0438\u043f\u043d\u0438\u043a\u043e\u0432\u0441\u043a\u0430\u044f \u0443\u043b., 24","metro":"\u0414\u0443\u0431\u0440\u043e\u0432\u043a\u0430"}}

Каким образом это спарсить в

List<HashMap<String,HashMap<String,String>>>

Хочу получить нечто похожее вль на такую структуру на примере декодирования этого JSON в php

Array
(
[2] => Array
    (
        [sessions] => Array
            (
                [0] => Array
                    (
                        [time] => 13:00
                        [price] => 410
                    )
                [1] => Array
                    (
                        [time] => 06:40
                        [price] => 340
                    )
                [2] => Array
                    (
                        [time] => 16:50
                        [price] => 370
                    )
            )
        [name] => Кинокис-L
        [locate] => Москва, Садовая-Спасская ул., 21, 56
        [metro] => Красные ворота
    )
[7] => Array
    (
        [sessions] => Array
            (
                [0] => Array
                    (
                        [time] => 06:35
                        [price] => 190
                    )
                [1] => Array
                    (
                        [time] => 00:05
                        [price] => 410
                    )
            )
        [name] => Кинокис-V
        [locate] => Павелецкая пл., 2, строение 1
        [metro] => Павелецкая
    )
[8] => Array
    (
        [sessions] => Array
            (
                [0] => Array
                    (
                        [time] => 15:10
                        [price] => 330
                    )
            )
        [name] => Кинокис-J
        [locate] => ул. Пречистенка, 40/2
        [metro] => Кропоткинская
    )
[9] => Array
    (
        [sessions] => Array
            (
                [0] => Array
                    (
                        [time] => 13:00
                        [price] => 600
                    )
                [1] => Array
                    (
                        [time] => 08:30
                        [price] => 300
                    )
                [2] => Array
                    (
                        [time] => 04:00
                        [price] => 510
                    )
                [3] => Array
                    (
                        [time] => 13:15
                        [price] => 340
                    )
            )
        [name] => Кинокис-U
        [locate] => Шарикоподшипниковская ул., 24
        [metro] => Дубровка
    )
 )

Пробовал вот такой вариант

String Sessions //JSON
Type listType = new TypeToken<List<HashMap<String,HashMap<String,String>>>>() {}.getType();
ArrayList<HashMap<String,HashMap<String,String>>> SessionsList = new Gson().fromJson(Sessions, listType)

К сожалению не работает

Answer 1

Каким образом это спарсить в List<HashMap<String,HashMap<String,String>>>

Вам не нужна такая структура. Сделайте классы

class Seanse {
    public String name;
    public String locate
    public String metro;
    public List<Sessions> sessions;
}
class Sessions {
    public String time;
    public double price;
}

и выгружайте

Gson g = new Gson();
Type type = new TypeToken<Map<String, Seanse>>(){}.getType();
Map<String, Seanse> myMap = g.fromJson(json, type);

В итоге у вас будет простой map, а не такой монстр...

Примерно это описано тут: Как и чем парсить Json на Java?

READ ALSO
Сохранить прогресс скролла NestedScrollView

Сохранить прогресс скролла NestedScrollView

У меня есть NestedScrollView, в котором есть TextView с большим объемом текста, мне нужно событие прокрутки при остановки сохранять в Preferences, возможно...

177
getCurrentPossition возвращает только 0

getCurrentPossition возвращает только 0

Хотел реализовать кнопки старта/паузы в notification'e, но метод getCurrentPosition никак не выдает реальное число, только 0

212
Помогите передать Context

Помогите передать Context

Никак не получается передать Context из одного класса в другой

224
Как правильно отрисовывать объекты в java swing

Как правильно отрисовывать объекты в java swing

У меня есть много объектов, которые хочу отрисовать на экранЕсли дело обстоит в обычной отрисовке, то тут никаких проблем не возникает, все...

298