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/天,具体规则查看活动详情