2017-05-09 17 views
0

このJSONObjectをJavaオブジェクトにマップする必要があります。 これは私のJSONです:JSONObjectをJavaオブジェクトにマップする方法

{"WALLET":{ 
      "ID":"1234", 
      "BAL":"20.000", 
      "NAME":"Filomena", 
      "EMAIL":"[email protected]", 
      "DOCS":[ 
       { 
        "ID":"001", 
        "S":"0", 
        "TYPE":"CardId", 
        "VD":"2019" 
       } 
      ], 
      "IBANS":[ 
       { 
        "ID":"001", 
        "S":"1", 
        "DATA":"iban", 
        "SWIFT":"swiftCode", 
        "HOLDER":"holder" 
       } 
      ], 
      "STATUS":"string", 
      "BLOCKED":"1", 
      "SDDMANDATES":[ 
       { 
        "ID":"sddMandateId", 
        "S":"status", 
        "DATA":"iban", 
        "SWIFT":"swiftCode" 
       } 
      ], 
      "LWID":"string", 
      "CARDS":[ 
       { 
        "ID":"string", 
        "EXTRA":{ 
         "IS3DS":"string", 
         "CTRY":"string", 
         "AUTH":"string", 
         "NUM":"string", 
         "EXP":"string", 
         "TYP":"string" 
        } 
       } 
      ], 
      "FirstName":"string", 
      "LastName":"string", 
      "CompanyName":"string", 
      "CompanyDescription":"string", 
      "CompanyWebsite":"string" 
     } 
} 

これは私のJavaクラスです:

public class Wallet { 

    private String id; 
    private String bal; 
    private String name; 
    private String email; 
    private List<Doc> docs; 
    private List<Iban> ibans; 
    private String status; 
    private String blocked; 
    private List<SddMandate> sddMandates ; 
    private String lwid; 
    private List<Card> cards; 
    private String firstName; 
    private String lastname; 
    private String companyName; 
    private String companyDescription; 
    private String companyWebSite; 



    public Wallet(){ 

    } 




    public Wallet(String id, String bal, String name, String email, List<Doc> docs, List<Iban> ibans, String status, 
      String blocked, List<SddMandate> sddMandates, String lwid, List<Card> cards, String firstName, 
      String lastname, String companyName, String companyDescription, String companyWebSite) { 
     super(); 
     this.id = id; 
     this.bal = bal; 
     this.name = name; 
     this.email = email; 
     this.docs = docs; 
     this.ibans = ibans; 
     this.status = status; 
     this.blocked = blocked; 
     this.sddMandates = sddMandates; 
     this.lwid = lwid; 
     this.cards = cards; 
     this.firstName = firstName; 
     this.lastname = lastname; 
     this.companyName = companyName; 
     this.companyDescription = companyDescription; 
     this.companyWebSite = companyWebSite; 
    } 




    public String getId() { 
     return id; 
    } 
    public void setId(String id) { 
     this.id = id; 
    } 
    public String getBal() { 
     return bal; 
    } 
    public void setBal(String bal) { 
     this.bal = bal; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public String getEmail() { 
     return email; 
    } 
    public void setEmail(String email) { 
     this.email = email; 
    } 
    public List<Doc> getDocs() { 
     return docs; 
    } 
    public void setDocs(List<Doc> docs) { 
     this.docs = docs; 
    } 
    public List<Iban> getIbans() { 
     return ibans; 
    } 
    public void setIbans(List<Iban> ibans) { 
     this.ibans = ibans; 
    } 



    public String getStatus() { 
     return status; 
    } 



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



    public String getBlocked() { 
     return blocked; 
    } 



    public void setBlocked(String blocked) { 
     this.blocked = blocked; 
    } 



    public List<SddMandate> getSddMandates() { 
     return sddMandates; 
    } 



    public void setSddMandates(List<SddMandate> sddMandates) { 
     this.sddMandates = sddMandates; 
    } 



    public String getLwid() { 
     return lwid; 
    } 



    public void setLwid(String lwid) { 
     this.lwid = lwid; 
    } 



    public List<Card> getCards() { 
     return cards; 
    } 



    public void setCards(List<Card> cards) { 
     this.cards = cards; 
    } 



    public String getFirstName() { 
     return firstName; 
    } 



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



    public String getLastname() { 
     return lastname; 
    } 



    public void setLastname(String lastname) { 
     this.lastname = lastname; 
    } 



    public String getCompanyName() { 
     return companyName; 
    } 



    public void setCompanyName(String companyName) { 
     this.companyName = companyName; 
    } 



    public String getCompanyDescription() { 
     return companyDescription; 
    } 



    public void setCompanyDescription(String companyDescription) { 
     this.companyDescription = companyDescription; 
    } 



    public String getCompanyWebSite() { 
     return companyWebSite; 
    } 



    public void setCompanyWebSite(String companyWebSite) { 
     this.companyWebSite = companyWebSite; 
} 

今私はgsonライブラリとオブジェクトをマッピングしようとしています。

Wallet walletDetails=gson.fromJson(rispostaGetWalletDetails.toString(), Wallet.class); 
    System.out.println("Balance: "+walletDetails.getBal()); 

私はオブジェクト上のメソッドを呼び出そうとすると、実際の値ではなく常にnullがあります。 どうすればいいですか?

+0

出力しようとしましたか? System.out.println(walletDetails); – Dezigo

+0

はい、文字列 – Filomena

+0

があります。大文字小文字は区別されませんか? jsonを小文字に変更しようとしましたか? – JSantos

答えて

4

ルートレベルが間違っています。 はおそらく、あなたはJSONは、属性名と一致しない

JSONObject yourObject = json.get("WALLET"); 
Wallet walletDetails = gson.fromJson(yourObject.toString(), Wallet.class); 
+0

すばらしい答え。 –

+0

ありがとうございました!!!! – Filomena

+0

素晴らしい直感、私はそれを逃した!とにかく、私はそれがまだJavaとJSONの間のフィールド名の不一致を処理しないと思う。わかりやすく私の答えを見てください。 – polaretto

0

あなたのオブジェクト変数名を1レベル下取得する必要がありますする必要があります。 jsonの "EMAIL"は、オブジェクト内に同じEMAILを持つ必要があります。これを克服するために、属性宣言の前に@JsonPropertyを記述することができます。例えばのための

@JsonProperty( "EMAIL") プライベート文字列電子メール;

0

デシリアライズながらGsonが正しいフィールド名のマッピングを処理させるには、あなたが(Javaの8を使用して)このようなFieldNamingStrategyを登録する必要があります。

Gson gson = new GsonBuilder() 
      .setFieldNamingStrategy(field -> field.getName().toUpperCase()) 
      .create(); 

戦略はあなたのものと一致するように、各Javaフィールド名を変換しますJSON。 これは、 "LastName"、 "CompanyName"などJSONレスポンスの上部ラクダのケースを除くほとんどのフィールドをカバーします。これらのフィールドをマップするには、FieldNamingStrategyを少しスマートにする必要がありますたとえば:

field -> { 
    String fname = field.getName(); 
    return "firstName".equals(fname) || "companyName".equals(fname) /*etc...*/ ? capitalize(fname) : fname.toUpperCase(); 
} 

など、私はあなたが考えていると思います。 capitalize()の方法はApache Commons Langのようなライブラリで見つけることができますし、独自のものを書くこともできます。

+0

多分私は小文字のjsonを受け取るでしょうが、今はDezigoの答えで動作します。とにかくありがとうございました。 – Filomena

+0

あなたは大丈夫ですが、単純なGsonインスタンスを使用してどのように動作するのか分かりません... JSONとクラスを使用して簡単なテストを試みましたが、デフォルトのGson設定、私は何かを欠いている?それがうまくいくなら、あなたにはいいです、私はちょうど方法を得ない:) – polaretto

関連する問題