使用jackson对Java对象与JSON字符串相互转换
来源:互联网 发布:大众mirrorlink 软件 编辑:程序博客网 时间:2024/05/18 02:31
jackson是一个用Java编写的,用来处理JSON格式数据的类库,它速度非常快,目前来看使用很广泛,逐渐替代了Gson和json-lib。
如果直接引入jar包,可以访问这个地址下载http://jackson.codehaus.org/1.9.11/jackson-all-1.9.11.jar
如果使用maven构建项目,加入下面的依赖
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.11</version>
</dependency>public class User {
private String name;
private Gender gender;
private List<Account> accounts;
省略get和set方法
...
}public enum Gender {
MALE,
FEMALE
}public class Account {
private Integer id;
private String cardId;
private BigDecimal balance;
private Date date;
省略get和set方法
...
}public static void main(String[] args) throws Exception {
User user = new User();
user.setName("菠萝大象");
user.setGender(Gender.MALE);
List<Account> accounts = new ArrayList<Account>();
Account account = new Account();
account.setId(1);
account.setBalance(BigDecimal.valueOf(1900.2));
account.setCardId("423335533434");
account.setDate(new Date());
accounts.add(account);
account = new Account();
account.setId(2);
account.setBalance(BigDecimal.valueOf(5000));
account.setCardId("625444548433");
account.setDate(new Date());
accounts.add(account);
user.setAccounts(accounts);
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, Boolean.TRUE);
String json = mapper.writeValueAsString(user);
System.out.println("Java2Json: "+json);
user = mapper.readValue(json, User.class);
System.out.println("Json2Java: "+mapper.writeValueAsString(user));
}之前使用的mapper.getSerializationConfig().setXxx方法现在很多都已经被标注为@Deprecated了,因此请大家使用上面的方式处理。
SerializationConfig.Feature枚举里面还有很多其它的设置项,比如日期,比如要不要输出null值等等。其它的还有:
org.codehaus.jackson.JsonGenerator.Feature.*
org.codehaus.jackson.JsonParser.Feature.*
让我们来看看输出结果,两次转换之后,打印出来的字符串应该是一样的:
OK,果然结果是一致的,大家现在应该会使用jackson进行Java与Json的互相转换了吧?恩,现在再考虑一种情况,如果想将List<User>的JSON字符串反转为泛型,应该怎么做呢?
想这样:mapper.readValue(json, List<User>.class)?这可是错误的,这里的参数是Class<T> valueType,valueType是Class<T>类的对象。如上面所示User.class 就是Class<User>类的对象。因此要想获得泛型的集合类型需要通过其它办法:
* 获取泛型的Collection Type
* @param jsonStr json字符串
* @param collectionClass 泛型的Collection
* @param elementClasses 元素类型
*/
public static <T> T readJson(String jsonStr, Class<?> collectionClass, Class<?>... elementClasses) throws Exception {
ObjectMapper mapper = new ObjectMapper();
JavaType javaType = mapper.getTypeFactory().constructParametricType(collectionClass, elementClasses);
return mapper.readValue(jsonStr, javaType);
}List<User> list = readJson(json, List.class, User.class);
ObjectMapper可以让对象与JSON之间相互转换,除此之外Jackson还提供了JsonGenerator 和JsonParser 这两个类,它们可以更细粒度的处理序列化与反序列化。调用ObjectMapper的writeValueAsString和readValue方法,最终还是会交给JsonGenerator 和JsonParser 去处理,对此还有疑惑的话,可以去看看这两个方法的源码。
- 使用jackson对Java对象与JSON字符串相互转换
- 使用jackson对Java对象与JSON字符串相互转换的一些总结
- 使用jackson对Java对象与JSON字符串相互转换的一些总结
- 使用jackson对Java对象与JSON字符串相互转换的一些总结
- 使用Jackson做对象与json之间的相互转换
- Jackson(一):java对象与json字符串互相转换
- 通过Jackson实现Java对象和json字符串的相互转换
- JSON对象与JSON字符串相互转换
- JSON对象与JSON字符串相互转换
- json字符串与json对象相互转换
- json字符串与json对象相互转换
- JSON对象与JSON字符串相互转换
- JSON对象与JSON字符串相互转换
- json字符串与json对象相互转换
- Jackson框架,实现Java对象/Json/XML相互转换
- 五分钟Jackson入门 JSON数据与Java对象相互转换(附项目源码)
- Java中Json字符串与对象之间的相互转换
- JSON 对象与字符串相互转换
- directX龙书学习笔记
- ListView与ScrollView的滑动冲突解决方法
- Linux 搭建Ad hoc网络
- 虚拟机VMware安装XP系统错误解决办法
- hdu 1233还是畅通工程
- 使用jackson对Java对象与JSON字符串相互转换
- OS X EI capitan openssl问题
- STL六大组件
- struts2(一)
- 分布式事务入门-Spring+JTA+Atomikos+Hibernate+JMS
- 《我是谁:没有绝对安全的系统》观影感受
- gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf 和glibc-2.14的安装与问题解析
- CAS实现单点登录(SSO)经典完整教程
- 自己动手搭建ava通用开发框架之一—底层框架搭建