如何在春天使用jackson序列化多级json?

时间:2015-09-23 22:05:58

标签: spring spring-mvc jackson

这是在端点/ foo / bar之外的响应主体。

如您所见,这是嵌套的json,因此对于每个级别,我需要Java object。构建这个的有效方法是什么?我正在使用Spring 4.1,而Jackson又使用serialize{ "user": { "status": { "state": "active", "message": [ "registered on 01.10.2015" ] } }, "features": { "xbox": { "state": "enabled", "message": [ "foo", "bar" ] }, "playstation": { "state": "disabled", "message": [ "hello ", "world" ] } } } POJO。

  @RequestMapping("foo/bar")
    @ResponseBody
    public Result getData(long id){

    Result result = getUserData(id);

    return result;
    }

public class Result {

   private User user;

   private List<Feature> features;

   //getters and setters

}

public class Status {

       private State state;

       private Message messages;

       //getters and setteers
}

public class State {

   private String state;
   //getters and setters
}

public class Message {

     private List<String> messages; 
     //getters and setters

}

这是我想到的事情

objectMapper

对于“features”节点,我将为每个级别的Json对象构造Java POJO。我知道使用JsonNodevar createSeriesData = function(){ seriesData = []; JSON_obj = JSON.parse('[{"CreatedDate":1314736440,"Reading":20.0},{"CreatedDate":1314779640,"Reading":7.9}]'); for(var key in JSON_obj){ if(JSON_obj.hasOwnProperty(key)){ seriesData[key] = []; seriesData[key].push(JSON_obj[key].CreatedDate.toString()); seriesData[key].push(JSON_obj[key].Reading.toString()); } } console.log(seriesData); } ,但想知道是否可以使用java对象有效地构造嵌套的json。

1 个答案:

答案 0 :(得分:0)

State这样的类可能是一个枚举,如果您确定只会有一个有限的值域。并且Message不应该是一个单独的类 - 只需将List<String> message直接嵌入Status

如果您想要更紧凑的表示,您可以随时提供自己的序列化器/反序列化器类来自定义转换。