Как правильно сериализовать такой JSON с помощью GSON Android?

Как правильно сериализовать такой JSON с помощью GSON Android?

[ { "id": "bitcoin", "name": "Bitcoin", "symbol": "BTC", "rank": "1", "price_usd": "15022.7", "price_btc": "1.0", "24h_volume_usd": "13711300000.0", "market_cap_usd": "251264422255", "available_supply": "16725650.0", "total_supply": "16725650.0", "max_supply": "21000000.0", "percent_change_1h": "0.94", "percent_change_24h": "17.4", "percent_change_7d": "47.71", "last_updated": "1512638053" }, { "id": "ethereum", "name": "Ethereum", "symbol": "ETH", "rank": "2", "price_usd": "427.071", "price_btc": "0.0291936", "24h_volume_usd": "2007350000.0", "market_cap_usd": "41078436955.0", "available_supply": "96186435.0", "total_supply": "96186435.0", "max_supply": null, "percent_change_1h": "-1.59", "percent_change_24h": "-5.64", "percent_change_7d": "-3.22", "last_updated": "1512638054" } ] 

Класс данных:

 class AllCurrenсyData { @SerializedName("") @Expose var currency: List<Currency>? = null } class Currency { @SerializedName("price_usd") @Expose val priceUsd: String? = null @SerializedName("symbol") @Expose val symbol: String? = null @SerializedName("last_updated") @Expose val lastUpdated: String? = null @SerializedName("total_supply") @Expose val totalSupply: String? = null @SerializedName("24h_volume_usd") @Expose val jsonMember24hVolumeUsd: String? = null @SerializedName("price_btc") @Expose val priceBtc: String? = null @SerializedName("available_supply") @Expose val availableSupply: String? = null @SerializedName("market_cap_usd") @Expose val marketCapUsd: String? = null @SerializedName("percent_change_1h") @Expose val percentChange1h: String? = null @SerializedName("percent_change_24h") @Expose val percentChange24h: String? = null @SerializedName("name") @Expose val name: String? = null @SerializedName("max_supply") @Expose val maxSupply: String? = null @SerializedName("rank") @Expose val rank: String? = null @SerializedName("id") @Expose val id: String? = null @SerializedName("percent_change_7d") @Expose val percentChange7d: String? = null } 

Для реализации этого я создал такие классы. Но я слушаю такой стек ошибок:

 FATAL EXCEPTION: main Process: it.incode.cryptocoins, PID: 2620 io.reactivex.exceptions.OnErrorNotImplementedException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $ at io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:704) at io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:701) at io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:74) at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.checkTerminated(ObservableObserveOn.java:276) at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(ObservableObserveOn.java:172) at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(ObservableObserveOn.java:252) at io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:109) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6164) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778) Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $ at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:224) at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:37) at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:25) at retrofit2.ServiceMethod.toResponse(ServiceMethod.java:118) at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:212) at retrofit2.OkHttpCall.execute(OkHttpCall.java:174) at com.jakewharton.retrofit2.adapter.rxjava2.CallObservable.subscribeActual(CallObservable.java:41) at io.reactivex.Observable.subscribe(Observable.java:10842) at com.jakewharton.retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34) at io.reactivex.Observable.subscribe(Observable.java:10842) at io.reactivex.internal.operators.observable.ObservableMap.subscribeActual(ObservableMap.java:33) at io.reactivex.Observable.subscribe(Observable.java:10842) at io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96) at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:452) at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:61) at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:52) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) at java.lang.Thread.run(Thread.java:761) Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $ at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:385) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:213) at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:37) at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:25) at retrofit2.ServiceMethod.toResponse(ServiceMethod.java:118) at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:212) at retrofit2.OkHttpCall.execute(OkHttpCall.java:174) at com.jakewharton.retrofit2.adapter.rxjava2.CallObservable.subscribeActual(CallObservable.java:41) at io.reactivex.Observable.subscribe(Observable.java:10842) at com.jakewharton.retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34) at io.reactivex.Observable.subscribe(Observable.java:10842) at io.reactivex.internal.operators.observable.ObservableMap.subscribeActual(ObservableMap.java:33) at io.reactivex.Observable.subscribe(Observable.java:10842) at io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96) at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:452) at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:61) at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:52) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) at java.lang.Thread.run(Thread.java:761) 

Скорее всего, я неправильно обрабатываю массив данных, который не имеет имени для сериализации. Надеюсь, кто-то скажет мне, где моя ошибка.

Вам не нужен объект AllCurrenсyData , вам нужно изменить только ваш вызов, чтобы вернуть список элементов

 fun getData() : Call<List<Currency>> 
Intereting Posts
Параметр, заданный как ненулевой, равен null в массиве ArrayAdaper Ячейки RecyclerView деформируются при открытии клавиатуры Конвертер Kotlin больше не работает для Android Studio 3.0 использовать kotlin для springmvc Не удалось создать экземпляр класса данных класса bean Правильный подход для неизменяемого конструктора, введенного классом Котлина Могу ли я создать метод расширения Kotlin для добавления rxJava-подписки на композитную подписку? FragmentTransaction hide / show иногда не работает Ошибка компиляции, вызывающая метод расширения из другого метода расширения в Котлине Изменить шаблон тестового файла Центрировать вертикально VideoView на портрете Карта Котлина с использованием операторов Имеет ли Kotlin функцию «перечисления», такую ​​как Python? Kotlin lateinit свойства, опасность NPE? Правильно расширить класс Widget с помощью Kotlin Как мое преобразование из String в Double не работает?