1

I wanna convert Json String to Object class. I tried several times with several codes but its gave me a error. Also now its gives null for list

Infor are below

Here is my 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"
    }
}

Here is my Main class code

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

Here is my out

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]]

But its additionalInfo = null :-(

How to resolve this one.?

Here with I'll attach remaining POJO classes too

Thanks

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
  • you can use jackson library for this. Commented Dec 1, 2016 at 10:15
  • Have you tried using some Collection for AdditionalInfo instead of array? For instance List<AdditionalInfo> additionalInfo;? I have used Gson library before and that was the problem AFAIR. Commented Dec 1, 2016 at 10:17
  • Provide AdditionalInfo class also Commented Dec 1, 2016 at 10:17

3 Answers 3

1

You have a small mistake in your JSON file, if you check the name "additionalInfo" you have and extra space at the end and that make it fails

"additionalInfo "

Change to

"additionalInfo"
Sign up to request clarification or add additional context in comments.

Comments

1

Try to change all your class to public (including your additionalinfo. It may help.

As I know some of JSON parser do not like private class thus they simply ignore it

Comments

1

I would use Jackson instead of Gson, but this is a matter of taste. First I would configure the reader (jackson/gson) to be tolerant, meaning the reader should not fail on missing or unknown properties in your json. ref:TolerantReader

Additionally I would try to use Collections (ArrayList in your case) over Arrays and initialize them as empty, to avoid Nullpointer exceptions.

Also, you have a lot of Strings in your model, I would choose the types more wisely.

And while typing @cralfaro already got the point I was going to make now :D To spot such typos earlier, may remove \r and \n from your testString.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.