我收到的JSON如下:
当然,我实现了Track、Album和Playlist类,这些类包含了所有的字段和类。
但是我遇到了错误:
11-20 19:24:55.210: E/AndroidRuntime(5432): 致命异常:主线程 com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: 预期的是BEGIN_OBJECT但实际上是BEGIN_ARRAY,位于第1行第13列。 在ReflectiveTypeAdapterFactory$Adapter.read()方法处抛出异常, 该方法位于com.google.gson.internal.bind.ReflectiveTypeAdapterFactory下的176行。 其他类似的异常还包括: ReflectiveTypeAdapterFactory$1.read() - 位于com.google.gson.internal.bind.ReflectiveTypeAdapterFactory下的93行; TypeAdapterRuntimeTypeWrapper.read() - 位于com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper下的40行; ArrayTypeAdapter.read() - 位于com.google.gson.internal.bind.ArrayTypeAdapter下的72行; Gson.fromJson() - 位于com.google.gson.Gson下的717、768、803行; MyRunnable.run() - 位于android.os.ResultReceiver下的43行。 此外,异常栈中还有关于Handler、Looper等的信息。 Caused by: java.lang.IllegalStateException: 预期的是BEGIN_OBJECT但实际上是BEGIN_ARRAY,位于第1行第13列。 在JsonReader.beginObject()方法处抛出异常,该方法位于com.google.gson.stream.JsonReader下的374行。
[
{
"albums" : [
{"id":"0", "name":"name"},
{"id":"1", "name":"name"}
],
"name":"name"
},
{
"tracks" : [
{"id":"0", "name":"name", "duration":"3:30"},
{"id":"1", "name":"name", "duration":"2:40"}
],
"name":"name"
},
{
"playlists" : [
{"id":"0", "name":"name", "tracksCount":"3"},
{"id":"1", "name":"name", "tracksCount":"40"}
],
"name":"name"
}
]
当然,我实现了Track、Album和Playlist类,这些类包含了所有的字段和类。
Tracks {
String name;
List<Track> tracks;
}
Albums {
String name;
List<Album> albums;
}
Playlists {
String name;
List<Playlist> playlists;
}
我正在尝试对其进行反序列化:
Gson gson = new Gson();
JsonResponse[] rez = gson.fromJson(str, JsonResponse[].class);
JsonResponse 是什么?
class JsonResponse {
Albums albums;
Tracks tracks;
Playlists playlists;
}
但是我遇到了错误:
11-20 19:24:55.210: E/AndroidRuntime(5432): 致命异常:主线程 com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: 预期的是BEGIN_OBJECT但实际上是BEGIN_ARRAY,位于第1行第13列。 在ReflectiveTypeAdapterFactory$Adapter.read()方法处抛出异常, 该方法位于com.google.gson.internal.bind.ReflectiveTypeAdapterFactory下的176行。 其他类似的异常还包括: ReflectiveTypeAdapterFactory$1.read() - 位于com.google.gson.internal.bind.ReflectiveTypeAdapterFactory下的93行; TypeAdapterRuntimeTypeWrapper.read() - 位于com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper下的40行; ArrayTypeAdapter.read() - 位于com.google.gson.internal.bind.ArrayTypeAdapter下的72行; Gson.fromJson() - 位于com.google.gson.Gson下的717、768、803行; MyRunnable.run() - 位于android.os.ResultReceiver下的43行。 此外,异常栈中还有关于Handler、Looper等的信息。 Caused by: java.lang.IllegalStateException: 预期的是BEGIN_OBJECT但实际上是BEGIN_ARRAY,位于第1行第13列。 在JsonReader.beginObject()方法处抛出异常,该方法位于com.google.gson.stream.JsonReader下的374行。
注意:在json响应中可能会缺少某些项。例如:
[
{
"albums" : [
{"id":"0", "name":"name"},
{"id":"1", "name":"name"}
],
"name":"name"
}
]
那么问题是什么,我该如何反序列化这个JSON?
顺便说一句,我不能改变JSON。所以我需要一段代码来按照它的原样解析它。