2016-08-19 168 views
0

我想使用Jackson將Java對象轉換爲JSON格式。我有一個類,它看起來非常以下結構如何使用jackson將Java對象轉換爲JSON樹格式

public Class Event 
{ 
    String type; 
    String timestamp; 
    String hostname; 
    String service; 
    Payload payload; 
} 

我對上述領域的getter和setter,並在有效載荷類的getter/setter方法。

這裏是JSON格式,我想

{ 
    "type":"end", 
    "time":"2016-08-01 11:11:11:111", 
    "origin":{ 
     "hostname":"<hostname>", 
     "service":"<service>" 
    }, 
    "version":"1.0" 
    "data":{ .... } 
} 

我似乎無法找到傑克遜的方式得到上面的格式,不知道怎麼把整個負載對象「數據」節點以及如何將主機名,服務放在「原始」節點中。

+1

嗨,你的JSON屬性名稱不匹配您的Java屬性的名字 - 你也將需要添加(故意?)有效載荷類,所以我們知道如何嵌套版本看起來像(例如是orign =>有效載荷?) – pandaadb

+0

嗨,來源不是有效載荷,它是包裹主機名和服務領域的頭的一部分,「數據」應該是包裝有效載荷 – Nitesh

回答

0

從你的問題,這是一個應該展示如何解決它的方法。由於您只發布了1個課程,因此我將有效負載更改爲地圖。它和其他類一樣工作。

考慮這個例子:

public class JacksonTest { 

    public static void main(String[] args) throws JsonProcessingException { 

     Event e = new Event(); 
     e.type="end"; 
     e.service="<service>"; 
     e.hostname = "<hostname>"; 
     e.timestamp = LocalDateTime.now().toString(); 
     Map<String,String> payload = new HashMap<>(); 
     payload.put("param1", "xyz"); 
     e.payload = payload; 

     String writeValueAsString = new ObjectMapper().writeValueAsString(e); 
     System.out.println(writeValueAsString); 
    } 



    public static class Event { 
     @JsonProperty 
     String type; 
     @JsonProperty("time") 
     String timestamp; 
     @JsonIgnore 
     String hostname; 
     @JsonIgnore 
     String service; 
     @JsonProperty("data") 
     Map<String, String> payload; 

     @JsonProperty("origin") 
     Map<String,String> getOrigin() { 
      Map<String,String> tmp = new HashMap<>(); 
      tmp.put("hostname", hostname); 
      tmp.put("service", service); 
      return tmp; 
     } 

     @JsonProperty("version") 
     private String getVersion() { 
      return "1.0"; 
     } 
    } 


} 

我註釋事件類我想需要的屬性,他們應該有名字。既然你希望主機名和服務在嵌套設置中,而不是爲它創建一個新對象(因爲你可以簡單地創建一個新對象,所以我會忽略這些對象),而是使用getter來創建必要的結構作爲地圖。

輸出是:

{ 
"type":"end", 
"time":"2016-08-19T16:45:18.072", 
"data":{"param1":"xyz"}, 
"origin":{ 
    "hostname":"<hostname>", 
    "service":"<service>" 
}, 
"version":"1.0" 
} 

Regads,

阿圖爾

相關問題