Wpis z mikrobloga

Mam jsona zapisanego w Stringu. Chcę go zmapować na obiekt za pomocą

WeatherForecast londonWeather = jsonb.fromJson(response, WeatherForecast.class);
Dla typów prostych i Stringów dobrze mi to mapuje. Ale problem mam gdy json jako wartość ma tablicę.
Więc spróbowałem w klasie napisać Weather[] nazwatablicyw_jsonie i dodałem nową klasę Weather w której dodałem interesujące mnie pola do zapisania z jsona.
edit: próbowałem zmienić typ na List i też lipa

Wygląda to tak: klasa WeatherForecast , klasa Weather
Dane mam z tego API https://www.metaweather.com/api/#location (jak drukuje jsona jak string to jest poprawny)

Jednak przy mapowaniu tablicy z jsona nie mapuje mi na tablicę w obiekcie (pole Weather[]). Wywala błąd

Exception in thread "main" javax.json.bind.JsonbException: Error deserialize JSON value into type: class java.lang.Integer.
Jak zmapować jsona na obiekt, jeśli są zagnieżdżone tablice innych obiektów?

#naukaprogramowania #java
  • 3
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Lewo: Błąd dotyczy deserializacji klasy Integer, a w klasie Weather tylko pole temp jest tego typu. W dokumentacji pole temp jest opisane jako Integer, ale w przykładowej odpowiedzi z serwera temp jest liczbą zmiennoprzecinkową np: "the_temp":13.129999999999999. Spróbuj zmienić na doubla
  • Odpowiedz
@kuba34512: właśnie też to zauważyłem. Zmieniłem na Float i hasa dzięki. I na lista i na tablicy.

@SuppressWarnings: tzn te podkreślniki działały wcześniej na "nie tablice". I w ramach debugowania tego błędu co wkleiłem zrobiłem konstruktor dla Weather który wyswietla napis jak się utworzy. Ale zrobiłem konstruktor na domyślnym widoku i implementacja jsonb zaczęła krzyczeć, że nie można utworzyć.
No to w ramach naprawiania nowych komunikatór błędów zacząłem
  • Odpowiedz