1ObjectMapper、SimpleModule、JsonNode三个类解释 2ObjectMapper类的writeValueAsString、valueToTree、readTree等方法

来源:互联网 发布:win8.1配置java环境 编辑:程序博客网 时间:2024/05/20 00:15

1ObjectMapper、SimpleModule、JsonNode三个类解释

1)ObjectMapper类是Jackson库的主要类。它提供一些功能将转换成Java对象匹配JSON结构,反之亦然。http://www.yiibai.com/jackson/jackson_objectmapper.html

2)JsonNode类是Jackson库的一个类,该类可以很容易的操作Json格式的数据,如①获取某个简单json串中某个key的值②获取某个层层嵌套的json串中某个key的值

3)SimpleModule,在自定义序列化时,才用得到。http://jackyrong.iteye.com/blog/2005323

jackson中自定义处理序列化和反序列化

    博客分类: 
  • JAVA相关
jackson 
对于一直用gson的人来说,如果单独用jackson,真是麻烦了,但还是得小结下了: 
先来看下如何自定义把某个对象序列化为json: 

先是对象: 
Java代码  收藏代码
  1. public class User {  
  2.     public int id;  
  3.     public String name;  
  4. }  
  5. public class Item {  
  6.     public int id;  
  7.     public String itemName;  
  8.     public User owner;  
  9. }  


   JACKSON一般的使用很容易,如; 
Item myItem = new Item(1, "theItem", new User(2, "theUser")); 
String serialized = new ObjectMapper().writeValueAsString(myItem); 
  结果为: 

    "id": 1, 
    "itemName": "theItem", 
    "owner": { 
        "id": 2, 
        "name": "theUser" 
    } 


  如果要输出为如下的样子,比如; 

    "id": 25, 
    "itemName": "FEDUfRgS", 
    "owner": 15 


  则要自定义了,要继承JsonSerializer类,如下: 
 
Java代码  收藏代码
  1. public class ItemSerializer extends JsonSerializer<Item> {  
  2.     @Override  
  3.     public void serialize(Item value, JsonGenerator jgen, SerializerProvider provider)   
  4.       throws IOException, JsonProcessingException {  
  5.         jgen.writeStartObject();  
  6.         jgen.writeNumberField("id", value.id);  
  7.         jgen.writeStringField("itemName", value.itemName);  
  8.         jgen.writeNumberField("owner", value.owner.id);  
  9.         jgen.writeEndObject();  
  10.     }  
  11. }  

  然后 
Java代码  收藏代码
  1. Item myItem = new Item(1"theItem"new User(2"theUser"));  
  2. ObjectMapper mapper = new ObjectMapper();  
  3.    
  4. SimpleModule module = new SimpleModule();  
  5. module.addSerializer(Item.classnew ItemSerializer());  
  6. mapper.registerModule(module);  
  7.    
  8. String serialized = mapper.writeValueAsString(myItem);  

    看,相当复杂,然后看有无办法简单点,其实是有的哦;方法为: 
Java代码  收藏代码
  1. @JsonSerialize(using = ItemSerializer.class)  
  2. public class Item {  
  3.     ...  
  4. }  


  就是使用注解@JsonSerialize,然后: 
  
Java代码  收藏代码
  1. Item myItem = new Item(1"theItem"new User(2"theUser"));  
  2. String serialized = new ObjectMapper().writeValueAsString(myItem);  




 2ObjectMapper类的writeValueAsString、valueToTree、readTree等方法

ObjectMapper mapper = new ObjectMapper();

String jsonStr=mapper.writeValueAsString(A);//A是任何一个自定的java类,或者是java类库的类如map      //得到的是一个json格式的String

JsonNode jn=mapper.valueToTree(B);//B是任何一个自定的java类,或者是java类库的类如map                //得到的是一个JsonNode类型(这个是Jackson框架jar包的一个类型)

JsonNode jn=mapper.readTree(C);//C是一个json格式String。                                                                          //得到的是一个JsonNode类型(这个是Jackson框架jar包的一个类型)

List list=mapper.readValue(D,List.class);//D是一个json格式String。                                                     //得到的是一个List类型。

问:我怎么记住,每个方法得到的是什么?

记忆技巧:方法的最末的单词(即标红的位置)意思是什么,得到的就是什么。两者一样。

1 0