получить значение элемента из файла JSON с помощью Gson - PullRequest
0 голосов
/ 04 февраля 2019

Здесь у меня небольшие проблемы с получением значения элемента из строки JSON с использованием Gson.

Прежде всего, первая часть моего кода - получить объект из массива:

String jsonOutput= weatherDataCollect(message);
        Gson gson = new Gson();
        JsonElement element = gson.fromJson(jsonOutput, JsonElement.class);
        JsonObject jsonObject = element.getAsJsonObject();
        System.out.println(jsonObject.toString());
        JsonArray list = jsonObject.getAsJsonArray("list");

Так что теперь, если я напишу:

JsonElement todaysWeather = list.get(0);

Я получу именно то, что мне нужно - эту часть json

{"dt":1549281600,"main":{"temp":-0.38,"temp_min":-1.3,"temp_max":-0.38,"pressure":1024.85,"sea_level":1027.5,"grnd_level":1024.85,"humidity":94,"temp_kf":0.91},"weather":[{"id":600,"main":"Snow","description":"небольшой снегопад","icon":"13d"}],"clouds":{"all":92},"wind":{"speed":2.11,"deg":271.5},"snow":{"3h":0.5445},"sys":{"pod":"d"},"dt_txt":"2019-02-04 12:00:00"}

В JSON масса таких частей, как эта.От всех мне нужно получить значение, подобное этому 1549281600 и сравнить с моим, чтобы выяснить, какое из них ближе.

Первая часть кода должна выглядеть следующим образом

        long tomorrowTime = getTomorrowUnixTime();
        long timeDifference = Integer.MAX_VALUE;
        int minDtIndex = 0; 
    for (int i = 0; i < list.size(); i++){
   JsonElement weatherItem = list.get(i);
   Integer dt = Integer.valueOf(weatherItem.getAsString("dt").toString());
                }

Но эточасть Integer dt = Integer.valueOf(weatherItem.getAsString("dt").toString()) не работает.Он должен получать значения от каждого dt и сравнивать с tomorrowTime

Вторая часть будет выглядеть так:

long diff = Math.abs(tomorrowTime - dt);
if(diff < timeDifference){
timeDifference = diff;
minDtIndex = i;

1 Ответ

0 голосов
/ 04 февраля 2019
Integer dt = Integer.valueOf(weatherItem.getAsString("dt").toString());

В этой строке вы получите следующую ошибку компиляции:

getAsString( ) 
in JsonElement cannot be applied

Это потому, что getAsString() не принимает никаких параметров, это ваша синтаксическая ошибка здесь.

Семантически вы сначала должны интерпретировать JSON Element как JSON Object, как только это объект JSON, вы можете извлечь ваше свойство с именем dt .

Способ сделать это:

Integer dt = new Integer(weatherItem.getAsJsonObject().get("dt").getAsInt());

Я приведу этот Вопрос и прочту о самом формате JSON в W3-Schools

Остальное вы можете управлять своей собственной логикой и кодированием :) Happy Coding!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...