2012-06-26 8 views
15

Recibo un error GSON al intentar desmantelar JSON en un objeto. El error (Se esperaba BEGIN_OBJECT pero estaba STRING en la línea 3 columna 22) señala la línea 3 de la entrada a continuación.GSON: BEGIN_OBJECT esperado, pero estaba STRING

¿No he correlacionado correctamente el JSON con respecto al Bean?

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; 
} 

Y mi entrada JSON se ve es lo siguiente:

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

Respuesta

18

No, no se ha trazado de manera correcta como su objeto JSON no es un BusinessPartnerCreate, que contiene una BusinessPartnerCreate.

Puede crear una clase sólo para encapsular su BusinessPartnerCreate pero sería más limpio para deserializar el contenedor como un jsonObject usando

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

y luego analizar el contenido interesante usando

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

Y yo le sugerimos que agregue una anotación para garantizar una asignación correcta del campo partnerType:

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

(y similar para el código postal)