如何使用jackson将Java对象转换为JSON树格式

时间:2016-08-19 15:18:29

标签: java jackson

我想使用Jackson将Java对象转换为JSON格式。我有一个类看起来几乎是以下结构

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

我有上述字段的getter和setter以及Payload类中的getter / setter。

这是json格式,我想要

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

我似乎无法找到获得上述格式的jackson方法,不知道如何将整个有效负载对象放在“数据”节点中以及如何将主机名,服务放在“origin”节点中。

1 个答案:

答案 0 :(得分: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";
        }
    }


}

我使用我想要的必要属性和它们应该具有的名称来注释Event类。由于您希望主机名和服务处于嵌套设置而不是为它创建新对象(因为您可以将序列化的新对象更容易),我忽略了这些对象,而是使用getter来创建必要的结构作为地图。

输出结果为:

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

Regads,

阿图尔