GSON:预计BEGIN_OBJECT但是STRING

Edg*_*ase 15 java json

我在尝试将JSON解组为对象时遇到GSON错误.错误(预期BEGIN_OBJECT但在第3行第22行是STRING)指向下面输入的第3行.

我没有正确映射关于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;
}
Run Code Online (Sandbox Code Playgroud)

我的输入JSON看起来是这样的:

{
    "business-partner-create": {
        "partner-type": "1",
        "person": {
            "firstName": "Dirk",
            "lastName": "Wintermill",
            "title": ""
        },
        "email": "kirk@yahoo.com",
        "phone": "219-385-2946",
        "addressClean": {
            "house-number": "10218",
            "street-name": "Park",
            "street-abbr": "Rd"
        },
        "city": "Somerset",
        "state": "NJ",
        "zip-code": "01955"
    }
}
Run Code Online (Sandbox Code Playgroud)

Den*_*ret 19

不,你没有正确映射它,因为你的json对象不是a BusinessPartnerCreate,它包含一个BusinessPartnerCreate.

您可以创建一个只是为了封装您的类,BusinessPartnerCreate但是将容器反序列化为jsonObject使用将更加清晰

 JsonParser parser = new JsonParser();
 JsonObject obj = parser.parse(json).getAsJsonObject();
Run Code Online (Sandbox Code Playgroud)

然后使用解析有趣的内容

BusinessPartnerCreate bpc = gson.fromJson(obj.get("business-partner-create"), BusinessPartnerCreate.class);
Run Code Online (Sandbox Code Playgroud)

我建议你添加一个注释,以确保正确的partnerType字段映射:

   @SerializedName "partner-type"
   protected JAXBElement<String> partnerType;
Run Code Online (Sandbox Code Playgroud)

(和邮政编码类似)