2013-04-18 2 views
4

나는 JSON 데이터안드로이드 JSON 오류 com.google.gson.JsonSyntaxException : java.lang.IllegalStateException

Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 

나는 해결책을 찾을 could'nt을 구문 분석이 오류에 직면하고있다. 내 JSON 데이터는 다음과 같습니다

{ 
    "user": [ 
    { 
     "email": "[email protected]", 
     "firstName": "Wijden", 
     "id": "1", 
     "lastName": "User" 
    }, { 
     "email": "[email protected]", 
     "firstName": "Sample", 
     "id": "2", 
     "lastName": "User" 
    }, { 
     "email": "[email protected]", 
     "firstName": "Ingenieur", 
     "id": "3", 
     "lastName": "User" 
    } 
    ] 
} 

을 그리고 이것은 내가 그것을 어떻게입니다 : 당신이 날 tnis 문제를 해결하는 데 도움을 줄 수있는 경우

Type type = new TypeToken<List<WorkItem>>() { }.getType(); 
List<WorkItem> workitems = (List<WorkItem>) new Gson().fromJson(resultat, type); 

내가 그것을 감사 크게 것이다. 미리 감사드립니다.

+0

JSONLint는 친구입니다 (http://jsonlint.com/). 이 경우 잘라내거나 붙여 넣은 세 줄이 유효합니다. 문제는 "다른 것"입니다. Q : 더 많은 코드를 제공 할 수 있습니까? Q : "new Gson(). fromJson()"을 사용하여 모든 것을 한꺼번에 수행하는 대신 몇 가지 추가 하위 변수로 분류 할 수 있습니까? – paulsm4

답변

2

, 내가 즉 응답에 클래스를 만들 것입니다 귀하의 JSON을 구문 분석하기 위해서 : 당신의 JSON의 reponse를 분석하기 위해,

public class User{ 
    @SerializedName("id") 
    private int id; 
    @SerializedName("email") 
    private String email; 
    @SerializedName("firstName") 
    private String firstName; 
    @SerializedName("lastName") 
    private String lastName; 
    //getters and setters 
} 

그런

public class Response { 
    @SerializedName("user") 
    private List<User> userList; 
    //getters and setters 
} 

하고, 다음을 수행하면됩니다.

Gson gson = new Gson(); 
Response data = gson.fromJson(yourJsonString, Response.class); 

그런 다음 데이터 버전 Y 쉽게, 같은 :

User user = data.getUserList.get(i); 

: @SerializedName 자바 명명 규칙을 따라야하기 위해, JSON 응답과 앱에서 필드의 이름을 분리하는 재미 주석의 사용 ...

+0

답장을 보내 주셔서 감사합니다. @SerializedName 주석이 매우 흥미 롭습니다. 그러나 jackson을 gss로 사용하는 Jersey와 함께 REST 웹 서비스를 사용하고 있습니까? – Wijden

+0

귀하의 요점을 이해하지 못합니다 ... 내 솔루션은 웹 서비스에서 어떤 것도 수정하지 않습니다! 그것은 JSON 응답을 파싱하기 위해 애플리케이션에 작성해야하는 것입니다. ** GSON **을 사용하고 있습니다. 코드에서 'new Gson()'을 가지고 있으며 질문에 태그를 추가했기 때문입니다. * gson * ... – MikO

+0

맞습니다.하지만 작동하지 않았습니다. 동일한 오류가 있습니다. – Wijden

0

Gson과 같은 컬렉션을 구문 분석하려고하면 Object가 아니라 JSON ARRAY (오류 메시지가 나타내는대로)가 있어야합니다. JSON은 ARRAY (객체 배열)를 포함하는 OBJECT입니다.

당신이 당신의 유형으로 컬렉션을 가지고있는 자바 객체가 필요하다는 것을 파싱하려면. 또는 json을 배열로 변경해야하거나 사용자 정의 serializer/deserializer를 만들 수 있습니다 (또는 다른 트릭을 만들 수도 있지만 요점은 JSON이 배열이 아니라는 것입니다). 선물).

은 빠른 수정을 위해 당신이로 구문 분석 자바 객체를 변경해보십시오 : https://sites.google.com/site/gson/gson-user-guide#TOC-Object-Examples :
public class WorkItemsContainer { 
    private List<WorkItem> workItems; 
    //getters/setters/ctor/etc 
} 

여기 섹션 "물체"를 GSON의 문서를 참조하십시오.

관련 문제