A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 大山哥哥 于 2018-7-4 23:40 编辑

在本帖子中,我们来一起总结一下fastjson和jackson的常用API。
首先准备一个实体类User:
[Java] 纯文本查看 复制代码
public class User {
        private Integer id;
        private String name;
        private Date birthday;
        
        public Integer getId() {
                return id;
        }
        public void setId(Integer id) {
                this.id = id;
        }
        public String getName() {
                return name;
        }
        public void setName(String name) {
                this.name = name;
        }
//        @JSONField(format="yyyy-mm-dd")
        public Date getBirthday() {
                return birthday;
        }
        public void setBirthday(Date birthday) {
                this.birthday = birthday;
        }
        @Override
        public String toString() {
                SimpleDateFormat dataFormat = new SimpleDateFormat("yyyy-MM-dd");
                return "User [id=" + id + ", name=" + name + ", birthday=" + dataFormat.format(birthday) + "]";
        }
}


接下来,开始我们的测试,下面的测试代码中已经将测试要求和结果进行了打印
[Java] 纯文本查看 复制代码
public class JsonTest {
	
	//准备存放了一个对象的json字符串
	private String userStr = "{\"id\":1,\"name\":\"简溪\",\"birthday\":\"2010-01-01\"}";
	//准备存放了一个集合的json字符串
	private String userArr = "[{\"id\":1,\"name\":\"简溪\",\"birthday\":\"2010-01-01\"},"
			+ "{\"id\":2,\"name\":\"顾里\",\"birthday\":\"2012-08-01\"}]";
	
	private User user;
	
	private List<User> users = new ArrayList<User>();
	
	@Before
	public void initUser() {
		//初始化一个用户
		User user = new User();
		user.setId(1);
		user.setName("林萧");
		user.setBirthday(new Date());
		this.user = user;
		
		//初始化一个集合
		User user1 = new User();
		user1.setId(1);
		user1.setName("林萧");
		user1.setBirthday(new Date());
		users.add(user1);
		
		User user2 = new User();
		user2.setId(2);
		user2.setName("顾源");
		user2.setBirthday(new Date());
		users.add(user2);
	}

	//fastjson
	@Test
	public void fastjson_json2Bean() {
		//[1-1] 对象格式json串转对象
		User user = JSONObject.parseObject(userStr, User.class);
		System.out.println(user);
		//打印效果如下:
		//User [id=1, name=简溪, birthday=2010-01-01]
		
		//[1-2] 集合格式json串转对象
		List<User> users = JSONArray.parseArray(userArr, User.class);
		System.out.println(users);
		//打印效果如下:
//		[User [id=1, name=简溪, birthday=2010-01-01], User [id=2, name=顾里, birthday=2012-08-01]]
	}
	
	@Test
	public void fastjson_bean2Json() {
		//[1-3] 对象转json串
		String userJson = JSONObject.toJSONString(user);
		System.out.println(userJson);
		//打印效果如下:
//		{"birthday":1530716739741,"id":1,"name":"林萧"}
		
		//[1-4] 集合转json串
		String usersStr = JSONArray.toJSONString(users);
		System.out.println(usersStr);
		//打印效果如下:
//		[{"birthday":1530716739741,"id":1,"name":"林萧"},{"birthday":1530716739741,"id":2,"name":"顾源"}]
	}
	
	//jackson
	@Test
	public void jackson_json2Bean() throws Exception {
		//[2-1] 对象格式json串转对象
		ObjectMapper jackson = new ObjectMapper();
		User user = jackson.readValue(userStr, User.class);
		System.out.println(user);
		//打印结果
//		User [id=1, name=简溪, birthday=2010-01-01]
		
		//[2-2 对象格式json串转对象
		List<User> users = jackson.readValue(userArr, new TypeReference<List<User>>() {});
		System.out.println(users);
		//打印结果
//		[User [id=1, name=简溪, birthday=2010-01-01], User [id=2, name=顾里, birthday=2012-08-01]]
	}
	
	@Test
	public void jackson_bean2Json() throws Exception {
		
		ObjectMapper jackson = new ObjectMapper();
		//[2-3] 对象转json串
		String userJson = jackson.writeValueAsString(user);
		System.out.println(userJson);
		//打印结果
//		{"id":1,"name":"林萧","birthday":1530717373507}
		
		//[2-4] 集合转json串
		String usersJson = jackson.writeValueAsString(users);
		System.out.println(usersJson);
		//打印结果
//		[{"id":1,"name":"林萧","birthday":1530717401460},{"id":2,"name":"顾源","birthday":1530717401460}]
		
	}
}

本次总结中,比较难的是jackson中将json字符串转成对象集合的过程。
PS:详细代码参见附件——本项目基于maven。
JAR包如下:


jars.jpg (50 KB, 下载次数: 44)

jars.jpg

jsonParse.zip

14.24 KB, 下载次数: 112

1 个回复

倒序浏览
我是华哥的小迷妹
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马