java - 不正确的 gson 代码 : Expected BEGIN_OBJECT but was STRING

标签 java android json gson

我编写了代码来解析来自服务器的 json 格式的响应。这是json

{
    "2FrontSide": {
        "back": ""
    },
    "3BackSide": {
        "back": ""
    },
    "4FrontSide": {
        "back": {
            "type": "image",
            "url": "http:\/\/www.abc.com\/sample_50.png"
        }
    }
}

解析这个响应的代码是

Type collectionType = new TypeToken<Map<String,Map<String, VideosImages>>>(){}.getType();
Map<String,Map<String, VideosImages>> data = json.fromJson(resp, collectionType);

它给了

10-23 17:50:25.500: W/System.err(29598): com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 33
10-23 17:50:25.500: W/System.err(29598):    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:180)
10-23 17:50:25.500: W/System.err(29598):    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:40)
10-23 17:50:25.505: W/System.err(29598):    at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:188)
10-23 17:50:25.505: W/System.err(29598):    at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:146)
10-23 17:50:25.505: W/System.err(29598):    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:40)
10-23 17:50:25.505: W/System.err(29598):    at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:188)
10-23 17:50:25.505: W/System.err(29598):    at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:146)
10-23 17:50:25.510: W/System.err(29598):    at com.google.gson.Gson.fromJson(Gson.java:755)
10-23 17:50:25.510: W/System.err(29598):    at com.google.gson.Gson.fromJson(Gson.java:721)
10-23 17:50:25.510: W/System.err(29598):    at com.google.gson.Gson.fromJson(Gson.java:670)
10-23 17:50:25.515: W/System.err(29598):    at com.putitout.buck.helpers.Network.fetchAllVideosAndImages(Network.java:47)
10-23 17:50:25.515: W/System.err(29598):    at com.putitout.buck.VideoPlayback$2.run(VideoPlayback.java:462)
10-23 17:50:25.520: W/System.err(29598):    at java.lang.Thread.run(Thread.java:856)
10-23 17:50:25.520: W/System.err(29598): Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 33
10-23 17:50:25.525: W/System.err(29598):    at com.google.gson.stream.JsonReader.expect(JsonReader.java:339)
10-23 17:50:25.525: W/System.err(29598):    at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:322)
10-23 17:50:25.530: W/System.err(29598):    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:168)
10-23 17:50:25.530: W/System.err(29598):    ... 12 more

最佳答案

实现 InstanceCreator<Resp>JsonDeserializer<Resp>对您的回应和 Collection 。

GsonBuilder 中注册类型适配器

GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter();

并在反序列化方法中解析您的 json 上下文。

    @Override
    public YourClass deserialize(JsonElement json, Type typeOfT,
            JsonDeserializationContext context){

}

关于java - 不正确的 gson 代码 : Expected BEGIN_OBJECT but was STRING,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13030910/

相关文章:

java - 在 Java 中给定 JSON 路径/JSON 指针获取 JSON 文件的行号

python - 在 Python 中使用 ijson 更新 JSON 值

java - 将多行写入java文件

java - Android 中倒计时器时间与实际时间之间的差异?

android - 找不到 com.android.tools.build :gradle:3. 0.0

android - 抛出空异常的 HTTP 请求

javascript - 如何解析 JSON 字符串,其中对象包装在另一个 json 数组中

java - Eclipse 中的 @NonNullByDefault 和 @Nullable 求值

java - 修改接口(interface)中的泛型如何影响向后兼容性

android - 通过从 webview 获取 URL 在媒体播放器中打开 Youtube 视频