2016-08-19 70 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,

阿图尔

相关问题