2014-10-01 3 views
0

이었다JSON의 직렬화 BEGIN_OBJECT 예상하지만 이것은 내가받은 JSON입니다 STRING

{ 
    "data": "{\"keystring\": \"ag5zfmNvcGFya3NlcnZlcnIUCxIHQ29tbWVudBiAgICAusaBCgw\"}", 
    "isSucceed": true, 
    "error": "" 
} 

그리고이 클래스와 가정 된 코드를 해제 직렬화 :

public class ServerResponse { 

    private boolean isSucceed; 
    private String error; 
    private JSONObject data; 
} 

//this is the code line responsible for deserialization, responseJson = the JSON above 
ServerResponse response = gson.fromJson(responseJson, ServerResponse.class); 

들어 어떤 이유로 내가 JsonSyntaxException : 기대 BEGIN_OBJECT하지만 STRING, 나는 ServerResponse 보유하고있는 데이터 객체와 관련 있다고 생각하지만, 유효한 Json으로 그것을 수신 ...

어떤 아이디어?

private JSONObject data; 

답변

1

귀하의 data 필드 유형 JSONObject이다. 그러나 해당 키 - 값 쌍에 대한 값

"data": "{\"keystring\": \"ag5zfmNvcGFya3NlcnZlcnIUCxIHQ29tbWVudBiAgICAusaBCgw\"}", 

은 JSON 문자열입니다. JSON 문자열은 Java String에 매핑됩니다. 따라서 JSON 객체를 예상했지만 JSON 문자열을 받았습니다.

TypeAdapter을 작성하고 등록하여 JSON 문자열에서 Java JSONObject으로 변환 할 수 있습니다. 또는 필드를 String으로 변경하고 필요시 JSONObject으로 변환 할 수 있습니다.

+1

내 TypeAdapter는 어떻게 작성합니까? – Jjang

+1

@Jjang 그것은 Gson 클래스입니다. [여기에 예제가 있습니다.] (http://www.javacreed.com/gson-typeadapter-example/) –

+0

TypeAdapter가 확실히이 방법입니다. – dharms