2012-10-23 121 views
1

我編寫代碼來解析服務器以json格式的響應。這裏是JSON不正確的gson代碼:預計BEGIN_OBJECT,但是STRING

{ 
    "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 

回答

2

實施InstanceCreator<Resp>JsonDeserializer<Resp>你的RESP和收集。在GsonBuilder

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

註冊類型的適配器在解析方法反序列化JSON的背景下。

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

} 
+0

GsonBuilder是jar文件裏面的。如何在那裏註冊類型適配器? –

+0

Resp只是一個字符串,我應該在我使用resp的類上實現這兩個接口嗎? –

+0

不,只是收集或你的班級VideoImages – Yahor10

相關問題