Reputation: 165
How i can parse this json using GSON?
[
[
456239452,180279471,"fsdgdfgdfg","T",
"M",244,0,0,"",0,82,"","[]","fgfdgdfg",10
],
[
456239451,180279471,"9wnntiu5vu9mBeDiBej4swfcztjOS4nJe",
"R","s",253,0,0,"",0,82,"","[]","cf46","g",14
]
]
My code:
data class Data(val list: List<List<String>>)
Gson().fromJson(json, Data::class.java).let {
it.list.forEach {
it.forEach {
println(it)
}
}
}
My stacktrace
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 com.google.gson.Gson.fromJson(Gson.java:888) at com.google.gson.Gson.fromJson(Gson.java:853) at com.google.gson.Gson.fromJson(Gson.java:802) at com.google.gson.Gson.fromJson(Gson.java:774) at dchistov.vkmusic.music.MusicFragment$initAudio$1.doResume(MusicFragment.kt:58) at kotlin.coroutines.experimental.jvm.internal.CoroutineImpl.resume(CoroutineImpl.kt:54) at kotlinx.coroutines.experimental.DispatchedTask$DefaultImpls.run(Dispatched.kt:161) at kotlinx.coroutines.experimental.DispatchedContinuation.run(Dispatched.kt:25) at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1412) at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:285) at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1152) at java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1990) at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1938) at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157) 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 com.google.gson.Gson.fromJson(Gson.java:888) at com.google.gson.Gson.fromJson(Gson.java:853) at com.google.gson.Gson.fromJson(Gson.java:802) at com.google.gson.Gson.fromJson(Gson.java:774) at dchistov.vkmusic.music.MusicFragment$initAudio$1.doResume(MusicFragment.kt:58) at kotlin.coroutines.experimental.jvm.internal.CoroutineImpl.resume(CoroutineImpl.kt:54) at kotlinx.coroutines.experimental.DispatchedTask$DefaultImpls.run(Dispatched.kt:161) at kotlinx.coroutines.experimental.DispatchedContinuation.run(Dispatched.kt:25) at java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1412) at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:285) at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1152) at java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1990) at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1938) at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Upvotes: 0
Views: 503
Reputation: 2931
Looks like the only thing you can do — it to parse it as List<List<Any>>
and then access elements by indices.
To achieve this you should do something like
import java.lang.reflect.Type
import com.google.gson.reflect.TypeToken
Type listType = object: TypeToken<List<List<Any>>>(){}.type
List<List<Any>> list = Gson().fromJson(jsonArray, listType)
Upvotes: 1