Deserializacja listy za pomocą GSON i Retrofit

0

Cześć ! Mam pytanie.
Jak zdeserializować takiego JSON-a:

[{
	"table": "A",
	"no": "024/A/NBP/2019",
	"effectiveDate": "2019-02-04",
	"rates": [{
		"currency": "bat (Tajlandia)",
		"code": "THB",
		"mid": 0.1194
	}, {
		"currency": "dolar amerykański",
		"code": "USD",
		"mid": 3.7408
	}, {
		"currency": "dolar australijski",
		"code": "AUD",
		"mid": 2.7040
	}, {
		"currency": "dolar Hongkongu",
		"code": "HKD",
		"mid": 0.4765
	}, {
		"currency": "dolar kanadyjski",
		"code": "CAD",
		"mid": 2.8575
	}, {
		"currency": "dolar nowozelandzki",
		"code": "NZD",
		"mid": 2.5772
	}, {
		"currency": "dolar singapurski",
		"code": "SGD",
		"mid": 2.7645
	}, {
		"currency": "euro",
		"code": "EUR",
		"mid": 4.2813
	}, {
		"currency": "forint (Węgry)",
		"code": "HUF",
		"mid": 0.013474
	}, {
		"currency": "frank szwajcarski",
		"code": "CHF",
		"mid": 3.7511
	}, {
		"currency": "funt szterling",
		"code": "GBP",
		"mid": 4.8868
	}, {
		"currency": "hrywna (Ukraina)",
		"code": "UAH",
		"mid": 0.1365
	}, {
		"currency": "jen (Japonia)",
		"code": "JPY",
		"mid": 0.034043
	}, {
		"currency": "korona czeska",
		"code": "CZK",
		"mid": 0.1664
	}, {
		"currency": "korona duńska",
		"code": "DKK",
		"mid": 0.5735
	}, {
		"currency": "korona islandzka",
		"code": "ISK",
		"mid": 0.031205
	}, {
		"currency": "korona norweska",
		"code": "NOK",
		"mid": 0.4422
	}, {
		"currency": "korona szwedzka",
		"code": "SEK",
		"mid": 0.4123
	}, {
		"currency": "kuna (Chorwacja)",
		"code": "HRK",
		"mid": 0.5774
	}, {
		"currency": "lej rumuński",
		"code": "RON",
		"mid": 0.9010
	}, {
		"currency": "lew (Bułgaria)",
		"code": "BGN",
		"mid": 2.1890
	}, {
		"currency": "lira turecka",
		"code": "TRY",
		"mid": 0.7151
	}, {
		"currency": "nowy izraelski szekel",
		"code": "ILS",
		"mid": 1.0306
	}, {
		"currency": "peso chilijskie",
		"code": "CLP",
		"mid": 0.00572
	}, {
		"currency": "peso filipińskie",
		"code": "PHP",
		"mid": 0.0714
	}, {
		"currency": "peso meksykańskie",
		"code": "MXN",
		"mid": 0.1954
	}, {
		"currency": "rand (Republika Południowej Afryki)",
		"code": "ZAR",
		"mid": 0.2797
	}, {
		"currency": "real (Brazylia)",
		"code": "BRL",
		"mid": 1.0221
	}, {
		"currency": "ringgit (Malezja)",
		"code": "MYR",
		"mid": 0.9138
	}, {
		"currency": "rubel rosyjski",
		"code": "RUB",
		"mid": 0.0570
	}, {
		"currency": "rupia indonezyjska",
		"code": "IDR",
		"mid": 0.00026806
	}, {
		"currency": "rupia indyjska",
		"code": "INR",
		"mid": 0.052192
	}, {
		"currency": "won południowokoreański",
		"code": "KRW",
		"mid": 0.003341
	}, {
		"currency": "yuan renminbi (Chiny)",
		"code": "CNY",
		"mid": 0.5528
	}, {
		"currency": "SDR (MFW)",
		"code": "XDR",
		"mid": 5.2194
	}]
}]

Kiedy mam tego JSON-a jako tekst w kodzie to deserializuje go tak:

        val json = "moj json"
        val gson = GsonBuilder().create()
        val listType = object : TypeToken<List<MainModel>>() {}.type
        gson.fromJson<Deserialize>(json, listType)

Wtedy wszystko działa.

Gdy próbuję pobrać ten JSON za pomocą Retrofit-a to pokazuje się mi taki błąd:

 com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $

Ten sam błąd miałem przy deserializacji ze zmiennej, ale naprawiłem to za pomocą TypeToken.

Czy da się to jakoś zaimplementować do Retrofit-a ?

0

A jaka odpowiedz przychodzi z Retrofita? Nie widze tutaj potrzeby uzywania TypeTokena.

Call z retrofita wyglada pewnie jakos tak Call<List<MainModel>>

gdzie

class MainModel {
  String table;
  String no;
  String effectiveDate;
  List<Rate> rates;
}
class Rate {
  String currency;
  String code;
  ...
}
0

To wygląda tak call: Call<MainModel>

1

Jesli z sieci przychodzi taki JSON jak wkleiles to blad jest prawidlowy. Przychodzi lista obiektow a nie obiekt (nawias kwadratowy jest pierwszy)
Expected BEGIN_OBJECT but was BEGIN_ARRAY

w tej chwili oczekujesz ze przyjdzie obiekt: Call<MainModel>

0

Zmieniłem to i wszystko działa. Dzięki !

1 użytkowników online, w tym zalogowanych: 0, gości: 1