2012-06-26 9 views
15

Otrzymuję błąd GSON, który próbuje usunąć niepoprawny JSON do obiektu. Błąd (Oczekiwano BEGIN_OBJECT, ale był to STRING w wierszu 3 kolumna 22) wskazuje wiersz 3 danych wejściowych poniżej.GSON: Oczekiwano BEGIN_OBJECT, ale był to STRING

Czy nie zmapowałem prawidłowo JSON w odniesieniu do fasoli?

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

A mój wkład JSON wygląda to w ten sposób:

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

Odpowiedz

18

Nie, nie zostały odwzorowane prawidłowo jako Twój obiekt JSON nie jest BusinessPartnerCreate, zawiera on BusinessPartnerCreate.

Można utworzyć klasę tylko do hermetyzacji swój BusinessPartnerCreate ale byłoby czystsze deserializowania pojemnik jako jsonObject użyciu

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

a następnie analizować ciekawych treści za pomocą

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

And I sugeruje dodanie adnotacji w celu zapewnienia poprawnego mapowania pola partnerType:

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

(i podobne do kodu pocztowego)

Powiązane problemy