如何将复杂的Json字符串转换为对象。

时间:2016-12-01 10:13:48

标签: java json gson

我想将Json String转换为Object类。我用几个代码尝试过几次,但它给了我一个错误。此外,它现在为列表

提供 null

Infor低于

这是我的Json

    {
    "customer": {
        "msisdn": "123456789",
        "imsi": "0987654321",
        "title": "Mr",
        "firstName": "Bilbo",
        "lastName": "Baggins",
        "dob": "21/10/2006",
        "identificationType": "PP",
        "identificationNumber": "PP12345DC",
        "onBehalfOf": "my_Merchant",
        "purchaseCategoryCode": "Game",
        "accountType": "Postpaid",
        "ownerType": "Paymaster",
        "status": "Confirmed",
        "requestIdentifier": "REQ12345678",
        "responseIdentifier": "RES12345678",
        "address": {
            "line1": "Bag End",
            "line2": "",
            "line3": "",
            "city": "The Shire",
            "country": "Middle Earth"
        },
        "additionalInfo ": [{
            "tag": "creditLimit",
            "value": "2500"
        }, {
            "tag": "creditLimit",
            "value": "2500"
        }],
        "resourceURL": "http://google.com/abc/123"
    }
}

这是我的主类代码

public class TestJsonDemo{
    public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {
        String testString="{\r\n" + 
                "   \"customer\": {\r\n" + 
                "       \"msisdn\": \"123456789\",\r\n" + 
                "       \"imsi\": \"0987654321\",\r\n" + 
                "       \"title\": \"Mr\",\r\n" + 
                "       \"firstName\": \"Bilbo\",\r\n" + 
                "       \"lastName\": \"Baggins\",\r\n" + 
                "       \"dob\": \"21/10/2006\",\r\n" + 
                "       \"identificationType\": \"PP\",\r\n" + 
                "       \"identificationNumber\": \"PP12345DC\",\r\n" + 
                "       \"onBehalfOf\": \"my_Merchant\",\r\n" + 
                "       \"purchaseCategoryCode\": \"Game\",\r\n" + 
                "       \"accountType\": \"Postpaid\",\r\n" + 
                "       \"ownerType\": \"Paymaster\",\r\n" + 
                "       \"status\": \"Confirmed\",\r\n" + 
                "       \"requestIdentifier\": \"REQ12345678\",\r\n" + 
                "       \"responseIdentifier\": \"RES12345678\",\r\n" + 
                "       \"address\": {\r\n" + 
                "           \"line1\": \"Bag End\",\r\n" + 
                "           \"line2\": \"\",\r\n" + 
                "           \"line3\": \"\",\r\n" + 
                "           \"city\": \"The Shire\",\r\n" + 
                "           \"country\": \"Middle Earth\"\r\n" + 
                "       },\r\n" + 
                "       \"additionalInfo \": [{\r\n" + 
                "           \"tag\": \"creditLimit\",\r\n" + 
                "           \"value\": \"2500\"\r\n" + 
                "       }, {\r\n" + 
                "           \"tag\": \"creditLimit\",\r\n" + 
                "           \"value\": \"2500\"\r\n" + 
                "       }],\r\n" + 
                "       \"resourceURL\": \"http://google.com/abc/123\"\r\n" + 
                "   }\r\n" + 
                "}";

        Gson gson=new Gson();
        CustomerInfo customerInfo = gson.fromJson(testString, CustomerInfo.class);
        System.out.println(customerInfo);
    }
}

这是我的出局

ClassPojo [customer = ClassPojo [lastName = Baggins, additionalInfo  = null, resourceURL = http://google.com/abc/123, status = Confirmed, msisdn = 123456789, ownerType = Paymaster, identificationType = PP, onBehalfOf = my_Merchant, responseIdentifier = RES12345678, requestIdentifier = REQ12345678, title = Mr, address = ClassPojo [line1 = Bag End, line3 = , country = Middle Earth, city = The Shire, line2 = ], dob = 21/10/2006, purchaseCategoryCode = Game, accountType = Postpaid, imsi = 0987654321, firstName = Bilbo, identificationNumber = PP12345DC]]

additionalInfo = null : - (

如何解决这个问题。?

此处我还会附加剩余的POJO课程

由于

class CustomerInfo {
    private Customer customer;

    public Customer getCustomer() {
        return customer;
    }

    public void setCustomer(Customer customer) {
        this.customer = customer;
    }

    @Override
    public String toString() {
        return "ClassPojo [customer = " + customer + "]";
    }
}

class Customer {
    private String lastName;

    private AdditionalInfo[] additionalInfo;

    private String resourceURL;

    private String status;

    private String msisdn;

    private String ownerType;

    private String identificationType;

    private String onBehalfOf;

    private String responseIdentifier;

    private String requestIdentifier;

    private String title;

    private Address address;

    private String dob;

    private String purchaseCategoryCode;

    private String accountType;

    private String imsi;

    private String firstName;

    private String identificationNumber;

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public AdditionalInfo[] getAdditionalInfo() {
        return additionalInfo;
    }

    public void setAdditionalInfo(AdditionalInfo[] additionalInfo) {
        this.additionalInfo = additionalInfo;
    }

    public String getResourceURL() {
        return resourceURL;
    }

    public void setResourceURL(String resourceURL) {
        this.resourceURL = resourceURL;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getMsisdn() {
        return msisdn;
    }

    public void setMsisdn(String msisdn) {
        this.msisdn = msisdn;
    }

    public String getOwnerType() {
        return ownerType;
    }

    public void setOwnerType(String ownerType) {
        this.ownerType = ownerType;
    }

    public String getIdentificationType() {
        return identificationType;
    }

    public void setIdentificationType(String identificationType) {
        this.identificationType = identificationType;
    }

    public String getOnBehalfOf() {
        return onBehalfOf;
    }

    public void setOnBehalfOf(String onBehalfOf) {
        this.onBehalfOf = onBehalfOf;
    }

    public String getResponseIdentifier() {
        return responseIdentifier;
    }

    public void setResponseIdentifier(String responseIdentifier) {
        this.responseIdentifier = responseIdentifier;
    }

    public String getRequestIdentifier() {
        return requestIdentifier;
    }

    public void setRequestIdentifier(String requestIdentifier) {
        this.requestIdentifier = requestIdentifier;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    public String getDob() {
        return dob;
    }

    public void setDob(String dob) {
        this.dob = dob;
    }

    public String getPurchaseCategoryCode() {
        return purchaseCategoryCode;
    }

    public void setPurchaseCategoryCode(String purchaseCategoryCode) {
        this.purchaseCategoryCode = purchaseCategoryCode;
    }

    public String getAccountType() {
        return accountType;
    }

    public void setAccountType(String accountType) {
        this.accountType = accountType;
    }

    public String getImsi() {
        return imsi;
    }

    public void setImsi(String imsi) {
        this.imsi = imsi;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getIdentificationNumber() {
        return identificationNumber;
    }

    public void setIdentificationNumber(String identificationNumber) {
        this.identificationNumber = identificationNumber;
    }

    @Override
    public String toString() {
        return "ClassPojo [lastName = " + lastName + ", additionalInfo  = "
                + additionalInfo + ", resourceURL = " + resourceURL
                + ", status = " + status + ", msisdn = " + msisdn
                + ", ownerType = " + ownerType + ", identificationType = "
                + identificationType + ", onBehalfOf = " + onBehalfOf
                + ", responseIdentifier = " + responseIdentifier
                + ", requestIdentifier = " + requestIdentifier + ", title = "
                + title + ", address = " + address + ", dob = " + dob
                + ", purchaseCategoryCode = " + purchaseCategoryCode
                + ", accountType = " + accountType + ", imsi = " + imsi
                + ", firstName = " + firstName + ", identificationNumber = "
                + identificationNumber + "]";
    }
}

class AdditionalInfo {
    private String tag;

    private String value;

    public String getTag() {
        return tag;
    }

    public void setTag(String tag) {
        this.tag = tag;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    @Override
    public String toString() {
        return "ClassPojo [tag = " + tag + ", value = " + value + "]";
    }
}

class Address {
    private String line1;

    private String line3;

    private String country;

    private String city;

    private String line2;

    public String getLine1() {
        return line1;
    }

    public void setLine1(String line1) {
        this.line1 = line1;
    }

    public String getLine3() {
        return line3;
    }

    public void setLine3(String line3) {
        this.line3 = line3;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getLine2() {
        return line2;
    }

    public void setLine2(String line2) {
        this.line2 = line2;
    }

    @Override
    public String toString() {
        return "ClassPojo [line1 = " + line1 + ", line3 = " + line3
                + ", country = " + country + ", city = " + city + ", line2 = "
                + line2 + "]";
    }
}

3 个答案:

答案 0 :(得分:1)

尝试将所有课程更改为公开课程(包括您的附加信息。这可能有所帮助。

据我所知,一些JSON解析器不喜欢私有类,因此他们只是忽略它

答案 1 :(得分:1)

你的JSON文件中有一个小错误,如果你检查你的名字“additionalInfo”和最后的额外空间并使它失败

"additionalInfo "

更改为

"additionalInfo"

答案 2 :(得分:1)

我会用杰克逊代替Gson,但这是一个品味问题。 首先,我会将阅读器(jackson / gson)配置为容忍,这意味着读者不应该在json中丢失或未知属性时失败。 参考:TolerantReader

另外,我会尝试在Arrays上使用Collections(在你的情况下是ArrayList)并将它们初始化为空,以避免Nullpointer异常。

此外,你的模型中有很多字符串,我会更明智地选择类型。

虽然输入@cralfaro已经得到了我现在要做的观点:D 要提前发现此类拼写错误,可以从view.requestFocus(); 中删除String sql = "SELECT count(*) from useraudit where USERID=? AND ENDDATETIME is null"; boolean result = false; int count = getJdbcTemplate().queryForObject( sql, new Object[] { userId }, Integer.class); if (count > 0) { result = true; } return result; \r