簡體   English   中英

將嵌套的 Java 對象轉換為 Jackson JSON

[英]Convert nested java objects to Jackson JSON

有人可以提供一個示例或參考,提供一種最好使用 Jackson 庫將嵌套 JAVA 對象轉換為 JSON 輸出的方法。 轉換平面 JAVA 對象沒有問題。 但是,JSON 庫顯示嵌套對象名稱和類型,而不是其子對象。 我幾乎利用了這里提供的相同代碼http://www.mkyong.com/java/jackson-2-convert-java-object-to-from-json/ 所以我沒有附上任何代碼示例。

例如

這就是我得到的:

{
  "fname": null,
  "lname": null,
  "addr": null
}

這是我需要的輸出:

{
    "name":null,
    "lname":null,
    "addr":{
        street:"mull",
        "city":null,
        "zip":0
    }
}

這是示例類對象:

import address;

public class id implements Serializable {
public String fname;
public String lname;
public address addr; 

} 

public class address implements Serializable {
public String street;
public String city; 
public int zip;
}

創建一個類地址。

public class Address {
    private String street;
    private String city; 
    private int zip;
    public String getStreet() {
        return street;
    }
    public void setStreet(String street) {
        this.street = street;
    }
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
    public int getZip() {
        return zip;
    }
    public void setZip(int zip) {
        this.zip = zip;
    }
}

創建一個類 ID。

 public class Id {
    private String fname;
    private String lname;
    private Address addr;
    public String getFname() {
        return fname;
    }
    public void setFname(String fname) {
        this.fname = fname;
    }
    public String getLname() {
        return lname;
    }
    public void setLname(String lname) {
        this.lname = lname;
    }
    public Address getAddr() {
        return addr;
    }
    public void setAddr(Address addr) {
        this.addr = addr;
    }
}

主要方法:

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class Test {
    public static void main(String[] args) {
        Address addressObj = new Address();
        addressObj.setCity("Chicago");
        addressObj.setStreet("Some Street");
        addressObj.setZip(12345);

        Id idObj = new Id();
        idObj.setAddr(addressObj);
        idObj.setFname("Test");
        idObj.setLname("Tester");

        ObjectMapper mapper = new ObjectMapper();

        //Object to JSON in String
        try {
            String jsonInString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(idObj);
            System.out.println(jsonInString);
        } catch (JsonProcessingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }       
    }
}

輸出:

{
  "fname" : "Test",
  "lname" : "Tester",
  "addr" : {
    "street" : "Some Street",
    "city" : "Chicago",
    "zip" : 12345
  }
}

您尚未在“id”類中初始化任何內容,這就是為什么一切都為空的原因。 如果您在將對象轉換為 json 之前創建一個地址對象並分配它,您將獲得您想要的結構。 類似以下的東西。

public static void main( String args[] ){
id i = new id();
address a = new address();
i.serAddress( a );
//do writeValueAsString here
}

注意:遵循類和變量的正確命名

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM