利用ObjectMapper进行对象与JSON互相转化

简介:

Jackson是一个流行的基于Java的JSON处理框架

官方wiki:http://wiki.fasterxml.com/JacksonInFiveMinutes

官方文档:http://wiki.fasterxml.com/JacksonDocumentation

学习参考: Json转换利器Gson之实例 系列,顺便也学习一下GSON

本篇简介如何使用Jackson进行Java对象与JSON的互相转换

新建基本Student类:

package com.jingshou.pojo;  
  
import java.util.Date;  
  
public class Student {  
    private int id;  
    private String name;  
    private Date birthDay;  
  
    public int getId() {  
        return id;  
    }  
  
    public void setId(int id) {  
        this.id = id;  
    }  
  
    public String getName() {  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public Date getBirthDay() {  
        return birthDay;  
    }  
  
    public void setBirthDay(Date birthDay) {  
        this.birthDay = birthDay;  
    }  
  
    @Override  
    public String toString() {  
        return "Student [birthDay=" + birthDay + ", id=" + id + ", name="  
                + name + "]";  
    }  
  
}  

班级类:

Java代码

package com.jingshou.pojo;  
  
import java.util.List;  
  
public class Class {  
    private String cname;  
    private List<Student> members;  
    public String getCname() {  
        return cname;  
    }  
    public void setCname(String cname) {  
        this.cname = cname;  
    }  
    public List<Student> getMembers() {  
        return members;  
    }  
    public void setMembers(List<Student> members) {  
        this.members = members;  
    }  
      
    public String toString(){  
        return "The Class Name is: " + cname + " " + "The members are: " + members;  
          
    }  
      
  
}  

测试代码:

Java代码

package com.jingshou.jackson;  
  
import java.io.IOException;  
import java.util.ArrayList;  
import java.util.Date;  
import java.util.List;  
  
import com.fasterxml.jackson.databind.ObjectMapper;  
import com.jingshou.pojo.Class;  
import com.jingshou.pojo.Student;  
  
public class JacksonTest1 {  
  
    public static void main(String[] args) throws IOException {  
        Student student1 = new Student();    
        student1.setId(5237);  
        student1.setName("jingshou");  
        student1.setBirthDay(new Date());  
          
        ObjectMapper mapper = new ObjectMapper();  
          
        // Convert object to JSON string  
        String Json =  mapper.writeValueAsString(student1);  
        System.out.println("Change Object to JSON String: " + Json);  
          
        // Convert Json string to Object  
        Student student2 = mapper.readValue(Json, Student.class);  
        System.out.println(student2);  
          
        // Create a student list add it to Bj  
        Student student3 = new Student();    
        student3.setId(5117);    
        student3.setName("saiya");    
        student3.setBirthDay(new Date());    
    
        List<Student> stuList = new ArrayList<Student>();  
        stuList.add(student1);  
        stuList.add(student3);  
          
        Class bj = new Class();  
        bj.setCname("五年二班");  
        bj.setMembers(stuList);  
          
        String json2 = mapper.writeValueAsString(bj);  
        System.out.println("The JSON from Class is: " + json2);  
          
        Class bj2 = mapper.readValue(json2, Class.class);  
        System.out.println(bj2);  
          
  
    }  
  
}  

运行结果:

Text代码

Change Object to JSON String: {"id":5237,"name":"jingshou","birthDay":1389513906622}  
Student [birthDay=Sun Jan 12 16:05:06 CST 2014, id=5237, name=jingshou]  
The JSON from Class is: {"cname":"五年二班","members":[{"id":5237,"name":"jingshou","birthDay":1389513906622},{"id":5117,"name":"saiya","birthDay":1389513906859}]}  
The Class Name is: 五年二班 The members are: [Student [birthDay=Sun Jan 12 16:05:06 CST 2014, id=5237, name=jingshou], Student [birthDay=Sun Jan 12 16:05:06 CST 2014, id=5117, name=saiya]] 

小结:

转换的关键就是ObjectMapper
在使用ObjectMapper对象readValue或者writeValue的时候,JSON可以以字符串的形式传入,也可以以文件的形式传入,官方的例子是让将JSON保存在文件中
明显JSON字串中的key与Java类中的field名字应该要相同
Student类如果有自定义构造函数的时候,进行JSON->对象转换会出错,接下去再研究这个问题…
Date域是以long类型输出的,有必要的话,需要进行格式转换

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值