jackson的一般用法

jackson的一般用法

之前处理json相关的数据都是用的fastjson来处理

前天一朋友给我出题,叫我用jackson来处理

那么我简单的了解了下,其实和fastjson用法是差不多的

如果您是用的maven来部署,那么jar的下载部分就很简单了

第一步:在pom.xml里添加如下代码

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.8.4</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.4.5</version>
</dependency>
这似乎是当前最新的版本了吧


第二步,我们开始测试对象转json数据

2.1、首先创建一个类 UserInfo

public class UserInfo {
	private int userid;
	private String username;
	private int usergrade;
	public UserInfo(){

	}
	public UserInfo(int userid,String username,int usergrade){
		this.userid = userid;
		this.username = username;
		this.usergrade = usergrade;
	}
	public int getUserid() {
		return userid;
	}
	public void setUserid(int userid) {
		this.userid = userid;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public int getUsergrade() {
		return usergrade;
	}
	public void setUsergrade(int usergrade) {
		this.usergrade = usergrade;
	}
}
注意我为什么创建了两个构造方法:我先是创建了一个有参的构造函数,用以初始化,我又创建了一个无参的构造函数。因为如果你不创建的话,后面在运行jackson代码的时候会报错


2.2、开始初始化类,下面这个方法是初始化


public static List<UserInfo> setListUserInfo() {
	List<UserInfo> userinfo = new ArrayList<UserInfo>();
	UserInfo userInfo1 = new UserInfo(1, "liki1", 2013);
	UserInfo userInfo2 = new UserInfo(2, "liki2", 2014);
	UserInfo userInfo3 = new UserInfo(3, "liki3", 2015);

	userinfo.add(userInfo1);
	userinfo.add(userInfo2);
	userinfo.add(userInfo3);

	return userinfo;
}
2.3、开始将这个list对象数组转换为json数据
//将对象转换为字符串
String UserInfoToJson =
objectMapper.writeValueAsString(setListUserInfo());
System.out.println(UserInfoToJson);

以上代码您可以写在main主函数中

打印结果如下:



[{"userid":1,"username":"liki1","usergrade":2013},{"userid":2,"username":"liki2","usergrade":2014},{"userid":3,"username":"liki3","usergrade":2015}]
表示已正确处理



2.4,将这个json数据还原成list对象数组

List<UserInfo> userInfo = objectMapper.readValue(UserInfoToJson,new
TypeReference<List<UserInfo>>(){});
System.out.println(userInfo.get(0).getUsername());

以上代码也是写在main主函数中

上面的代码打印结果如下:


liki1
表示已正确处理


第三步:前端传递过来的json数据,如何转化为对象(List<Map>对象)

这里有一个json字符串


String ListJson = "[{'id':'1','status':'1'},{'id':'5','status':'1'},{'id':'3','status':'0'}]";
那么,我们如何将他转化为一个List<Map<String,Object>>类型呢


用以下代码即可实现

ObjectMapper mapper = new ObjectMapper();
	try {
		List<Map<String, Object>> list = mapper.configure(Feature.ALLOW_SINGLE_QUOTES,true).readValue(ListJson, new TypeReference<List<Map<String, Object>>>(){});
		for (Map<String, Object> obj : list) {
			System.out.println(obj);
		}
		System.out.println(list.get(1).get("id"));
	} catch (Exception e) {
		e.printStackTrace();
	}
以上代码的答应结果如下:
{id=1, status=1}
{id=5, status=1}
{id=3, status=0}
5
如果你又想将这个List<Map<String,Object>>,转换为json数组,那您可以这样
System.out.println(mapper.writeValueAsString(list));
结果如下:
[{"id":"1","status":"1"},{"id":"5","status":"1"},{"id":"3","status":"0"}]


好了,最后说说,在对List<UserInfo>进行操作的时候,为什么添加了有参的构造函数后必须要添加无参的构造函数

是因为,如果你添加,就会出现如下的错误


Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: No suitable constructor found for type [simple type, class springMVC.NLoveB.utils.UserInfo]: can not instantiate from JSON object (need to add/enable type information?)
所以,我们如果添加了有参的构造函数后,就必须添加默认的无参构造函数



爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情Blog Img