Как преобразовать вложенный json в Map без вписывания типов с помощью Gson - PullRequest
1 голос
/ 16 октября 2019

Я пытаюсь понять / научиться извлекать данные из API погоды, я успешно это сделал и получил файл Json, заполненный данными. Мне удалось с помощью gson поместить информацию в карту.

Но он также имеет вложенный json для ключа main, где я извлекаю значение из того, что может быть явным приведением типов.

Я хотел бы спросить, есть либолее аккуратный способ сделать это, так что мне не нужно делать явное приведение типов вложенных json в Map

Map<String, Object> resultMap = new Gson().fromJson(jsonString, new TypeToken<HashMap<String, Object>>() {
            }.getType());

            for (Map.Entry<String, Object> entry : resultMap.entrySet()) {
                System.out.println(entry);
            }

            System.out.println(resultMap.get("temp"));
            Map<String, Object> mainMap = (Map<String, Object>) resultMap.get("main");
            System.out.println("Temp: " + mainMap.get("temp"));

Это мой вывод в консоли:

rain={}
visibility=10000.0
timezone=7200.0
main={temp=8.1, pressure=1007.0, humidity=93.0, temp_min=7.0, temp_max=10.0}
clouds={all=75.0}
sys={type=1.0, id=1788.0, country=SE, sunrise=1.571203601E9, sunset=1.571240388E9}
dt=1.571249075E9
coord={lon=18.06, lat=59.33}
weather=[{id=301.0, main=Drizzle, description=drizzle, icon=09n}]
name=Stockholm
cod=200.0
id=2673730.0
base=stations
wind={speed=3.6, deg=40.0}
null
Temp: 8.1

1 Ответ

0 голосов
/ 16 октября 2019

Я бы сказал, что вы можете преобразовать строку json в Map<String, JsonElement>, чтобы у вас были методы для поиска вложенного объекта JsonObject или JsonArray. Таким образом, в примере удара main является ключом с JsonObject в качестве значения

main: {
        temp:8.1, 
        pressure:1007.0, 
        humidity=93.0, 
        temp_min=7.0, 
        temp_max=10.0
      }

. Вы можете проанализировать значение в Map, используя fromJson

Map<String, Object> resultMap = new Gson().fromJson(jsonString, new TypeToken<Map<String, Object>>() {
        }.getType());

        for (Map.Entry<String, Object> entry : resultMap.entrySet()) {
            System.out.println(entry);
        }

        System.out.println(resultMap.get("temp"));
        Map<String, Object> mainMap = new Gson().fromJson(resultMap.get("main").toString(), new TypeToken<Map<String, Object>>() {
        }.getType());
        System.out.println("Temp: " + mainMap.get("temp"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...