2016-12-01 84 views
1

我想將Json String轉換爲Object類。我用幾個代碼嘗試了幾次,但它給了我一個錯誤。另外現在它給人的列表如何將複雜的Json字符串轉換爲對象。

的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 + "]"; 
    } 
} 
+0

你可以使用jackson庫來做到這一點。 – ManishKr

+0

您是否嘗試過使用AdditionalInfo的某個集合而不是數組?例如'List additionalInfo;'?我之前使用過Gson庫,那是AFAIR的問題。 – null

+0

提供AdditionalInfo類也 – Palak

回答

1

您的JSON文件中有一個小錯誤,如果您檢查名稱「add itionalInfo」你有,並在年底額外的空間,使得它無法

"additionalInfo " 

更改爲

"additionalInfo" 
+0

哇..感謝這麼多cralfaro ü保存我的日子:-) – Priyanka

+0

歡迎:) – cralfaro

1

試圖去改變所有的類公衆(包括你的additionalinfo。它可以幫助。

據我所知一些JSON解析器不喜歡私人類,因此他們只是忽略它

+0

注意SKLTFZ與謝謝 – Priyanka

1

我會用傑克遜,而不是GSON,但是這是一個品味問題。 首先我會配置閱讀器(傑克遜/格森)是寬容的,這意味着讀者不應該在你的JSON中失蹤或未知屬性失敗。 ref:TolerantReader

另外我會嘗試在數組上使用Collections(ArrayList),並將它們初始化爲空,以避免Nullpointer異常。

此外,你的模型中有很多字符串,我會更明智地選擇類型。

雖然打字@cralfaro已經得到了我現在要說明一點:d 要發現這樣的錯別字較早,可能與您的testString刪除\r\n

+0

注意到sschrass與謝謝 – Priyanka

相關問題