2012-10-23 2 views
1

했다. 여기에 JSON잘못된 GSON 코드 : BEGIN_OBJECT를 예상하지만 JSON 형식으로 서버에서 응답을 구문 분석하는 코드를 작성 STRING

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

이 응답을 구문 분석 할 수있는 코드는

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>를 구현 제공

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

이다. GsonBuilder

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

와의

등록 유형 어댑터는 직렬화 방법에 JSON 컨텍스트를 구문 분석합니다.

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

} 
+0

GsonBuilder는 jar 파일 안에 있습니다. Type adapter는 어떻게 등록합니까? –

+0

Resp는 단지 문자열입니다. resp를 사용하는 클래스에서이 두 인터페이스를 구현해야합니까? –

+0

아니요, 그냥 컬렉션 또는 클래스 VideoImages – Yahor10

관련 문제