2012-06-26 3 views
15

JSON을 객체로 비 정렬 화하려고하면 GSON 오류가 발생합니다. 오류 (BEGIN_OBJECT이 (가) 예상되지만 행 3 열의 문자열 22에 있음)은 아래 입력의 3 행을 가리 킵니다.GSON : 예상 BEGIN_OBJECT이지만 STRING이었습니다

Bean과 관련하여 JSON을 올바르게 매핑하지 않았습니까?

import javax.xml.bind.JAXBElement; 

public class BusinessPartnerCreate { 
    protected JAXBElement<String> partnerType; 
    protected Person person; 
    protected Company company; 
    protected String email; 
    protected String phone; 
    protected AddressData addressData; 
    protected AddressClean addressClean; 
    protected String city; 
    protected String state; 
    protected String zipCode; 
    protected JAXBElement<String> externalId; 
} 

그리고 내 입력 JSON 보이는

은 이것이다 :

{ 
    "business-partner-create": { 
     "partner-type": "1", 
     "person": { 
      "firstName": "Dirk", 
      "lastName": "Wintermill", 
      "title": "" 
     }, 
     "email": "[email protected]", 
     "phone": "219-385-2946", 
     "addressClean": { 
      "house-number": "10218", 
      "street-name": "Park", 
      "street-abbr": "Rd" 
     }, 
     "city": "Somerset", 
     "state": "NJ", 
     "zip-code": "01955" 
    } 
} 

답변

18

하여 JSON 객체가 BusinessPartnerCreate이, 그것은 BusinessPartnerCreate을 포함 아니므로 아니, 당신은 제대로 매핑되지했습니다.

당신은 단지 캡슐화하는 클래스를 만들 수 있습니다 BusinessPartnerCreate하지만

JsonParser parser = new JsonParser(); 
JsonObject obj = parser.parse(json).getAsJsonObject(); 

를 사용하여 jsonObject으로 컨테이너를 역 직렬화하고

BusinessPartnerCreate bpc = gson.fromJson(obj.get("business-partner-create"), BusinessPartnerCreate.class); 

그리고 I를 사용하여 흥미로운 콘텐츠를 구문 분석 청소기 것 입력란의 올바른 매핑을 위해 특수 효과를 추가하는 것이 좋습니다.

@SerializedName "partner-type" 
    protected JAXBElement<String> partnerType; 

(우편 번호와 유사)