вытащить массив из файла JSON

149
09 сентября 2019, 09:10

Всем привет) Помогите разобраться. Есть такой JSON файл:

{
  "cod":"200",
  "message":0.0021,
  "cnt":40,
  "list":[
    {
      "dt":1547812800,
      "main":{
        "temp":-5.72,
        "temp_min":-6.64,
        "temp_max":-5.72,
        "pressure":1005.73,
        "sea_level":1008.41,
        "grnd_level":1005.73,
        "humidity":91,
        "temp_kf":0.91
      },
      "weather":[
        {
          "id":600,
          "main":"Snow",
          "description":"небольшой снегопад",
          "icon":"13d"
        }
      ],
      "clouds":{
        "all":76
      },
      "wind":{
        "speed":4.27,
        "deg":281.504
      },
      "snow":{
        "3h":0.163
      },
      "sys":{
        "pod":"d"
      },
      "dt_txt":"2019-01-18 12:00:00"
    },
    {
      "dt":1547823600,
      "main":{
        "temp":-7.03,
        "temp_min":-7.72,
        "temp_max":-7.03,
        "pressure":1006.97,
        "sea_level":1009.62,
        "grnd_level":1006.97,
        "humidity":80,
        "temp_kf":0.69
      },
      "weather":[
        {
          "id":600,
          "main":"Snow",
          "description":"небольшой снегопад",
          "icon":"13n"
        }
      ],
      "clouds":{
        "all":68
      },
      "wind":{
        "speed":3.57,
        "deg":282.502
      },
      "snow":{
        "3h":0.039
      },
      "sys":{
        "pod":"n"
      },
      "dt_txt":"2019-01-18 15:00:00"
    }
  ],
  "city":{
    "id":536203,
    "name":"Sankt-Peterburg",
    "coord":{
      "lat":59.9167,
      "lon":30.25
    },
    "country":"RU"
  }
}

Чтобы вытащить оттуда массив list, сначала полученный с сайта JSON файл превращаю в строку

String weatherData = "";
        while (in.hasNext()) {
            weatherData += in.nextLine();
        }
        return weatherData;

Затем достаю этим методом массив list

JSONObject weatherDataJson = new JSONObject(weatherDataCollect(message));
// create array of dts
JSONArray list1 = weatherDataJson.getJSONArray("list");
FiveDaysWeather fiveDaysWeatherObj = null;
Gson fiveDaysWeatherGson = new Gson();
// get object from found dt
JSONObject todaysWeather = list1.getJSONObject(0);
fiveDaysWeatherObj = fiveDaysWeatherGson.fromJson(todaysWeather.toString(), FiveDaysWeather.class);
return fiveDaysWeatherObj.weatherShow(message, "сегодня");

Есть ли возможность вытащить массив list без использования JSON? Только средствами GSON?

Answer 1

Заходите на сайт http://www.jsonschema2pojo.org/

Вставляете свой json. Выставляете настройки: Target language: java, Source type: JSON, Annotation style: None. Нажимаете Preview - вам сгенерируют все необходимые классы.

Описание json:

    class Coord {
        float lat;
        float lon;
    }
    class City {
        int id;
        String name;
        Coord coord;
    }
    class Main {
        float temp;
        float tempMin;
        float tempMax;
        float pressure;
        float seaLevel;
        float grndLevel;
        int humidity;
        float tempKf;
    }
    class Weather {
        int id;
        String main;
        String description;
        String icon;
    }
    class Clouds {
        int all;
    }
    class Wind {
        float speed;
        float deg;
    }
    class Snow {
        float _3h;
    }
    class Sys {
        String pod;
    }
    class MyList {
        int dt;
        Main main;
        List<Weather> weather;
        Clouds clouds;
        Wind wind;
        Snow snow;
        Sys sys;
        String dtTxt;
    }

    class MainExample{
        int cod;
        String message;
        int cnt;
        List<MyList> list; <-- ваш список
        City city;
    }

Пример работы:

    //json
    String jsonOutput= "...";
    //описание типа
    Type listType = new TypeToken<MainExample>(){}.getType();
    //преобразование json в объект
    MainExample mainExample = new Gson().fromJson(jsonOutput, listType);
    for (MyList item: mainExample.list){
        if (item.dt==1547812800){
          item.main.temp
          item.main.humidity
          item.wind.speed
          item.weather[0].description
        }
    }
READ ALSO
Переход к активности по нажатию кнопок в уведомлении

Переход к активности по нажатию кнопок в уведомлении

В уведомлении присутствуют 3 кнопкиПо нажатию каждой из них должна открываться активность и выполняться определенное действие

134
Извлечь данные из SessionStorage

Извлечь данные из SessionStorage

При открытии сайта некоторые данные хранятся в SessionStorage в JSONКак их оттуда можно вытащить?

123
Совместимость JDK 11 и JRE 8

Совместимость JDK 11 и JRE 8

Будет ли приложение, написанное на JDK 11, работать у пользователя, у которого установлен JRE 8? Если нет, то как сделать так? (кроме как устанавливать...

147