如何在Java对象中映射JSONObject

时间:2017-05-09 10:56:46

标签: java json

我必须将此JSONObject映射到Java对象。 这是我的Json:

{"WALLET":{  
            "ID":"1234",
            "BAL":"20.000",
            "NAME":"Filomena",
            "EMAIL":"filo@gmail.com",
            "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而不是实际值。 我该怎么做?

3 个答案:

答案 0 :(得分:4)

您的根级别错误。 可能你需要降低一级

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

答案 1 :(得分:0)

您的对象变量名称与json属性名称不匹配。 &#34; EMAIL&#34;在json中应该在对象中具有相同的EMAIL。为了解决这个问题,你可以在属性声明之前提及@JsonProperty。

例如:

@JsonProperty(&#34; EMAIL&#34) 私人字符串电子邮件;

答案 2 :(得分:0)

要让Gson在反序列化时处理正确的字段名称映射,您必须像这样注册FieldNamingStrategy(使用Java 8):

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

该策略将转换每个Java字段名称以匹配JSON中的字段名称。 这将涵盖几乎所有字段,除了JSON响应中的那些上层驼峰,例如“LastName”,“CompanyName”等。为了映射这些字段,你的FieldNamingStrategy必须变得更聪明一点,像:

field -> {
    String fname = field.getName();
    return "firstName".equals(fname) || "companyName".equals(fname) /*etc...*/ ? capitalize(fname) : fname.toUpperCase();
}
等等,我想你明白了。 您可以在像Apache Commons Lang这样的库中找到capitalize()方法,也可以自己编写,这只是为了进行示例。

相关问题