GSON: ожидаемый BEGIN_OBJECT, но был STRING
Я получаю ошибку GSON, пытающуюся развязать JSON в объект. Ошибка (Ожидаемая BEGIN_OBJECT, но была STRING в строке 3 столбца 22) указывает на строку 3 ниже.
Я не правильно настроил JSON относительно 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;
}
И мой вход 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"
}
}
Ответы
Ответ 1
Нет, вы не правильно отобразили его, так как ваш json-объект не является BusinessPartnerCreate
, он содержит BusinessPartnerCreate
.
Вы можете создать класс, чтобы инкапсулировать ваш BusinessPartnerCreate
, но было бы проще десериализовать контейнер как jsonObject
, используя
JsonParser parser = new JsonParser();
JsonObject obj = parser.parse(json).getAsJsonObject();
а затем проанализируйте интересный контент, используя
BusinessPartnerCreate bpc = gson.fromJson(obj.get("business-partner-create"), BusinessPartnerCreate.class);
И я предлагаю вам добавить аннотацию, чтобы обеспечить правильное отображение поля partnerType
:
@SerializedName "partner-type"
protected JAXBElement<String> partnerType;
(и аналогичный для zip-кода)