使用jackson对json的操作

jackson是一个开源的处理json的工具包,spring mvc中的json类型响应就是用这个东西实现的,性能比较优异。我以前最早的项目用的是json-lib,后来因效率问题改为gson,现在看来可以换成jackson了。
下面给大家讲讲jackson的使用:
一、简单对象转为json
ObjectMapper om = new ObjectMapper();
StringWriter result = new StringWriter();
om.writeValue(result, 【这个参数是你要转换的东西,对象或集合都是可以的】);

当然,如果你不想用StringWriter的话,你可以直接用om.writeValueAsString(obj)直接输出字符串。

二、日期的处理
默认情况下,jackson会把日期处理为毫秒,如果你想处理成字符串,可以:
ObjectMapper om = new ObjectMapper();
om.setDateFormat(new SimpleDateFormat(“yyyy-MM-dd”));

三、排除不想要的属性
这个主要是用来解决对象间循环关联的情况的,使用如下:
SimpleBeanPropertyFilter filter = SimpleBeanPropertyFilter.serializeAllExcept(“不要的属性名”);
SimpleFilterProvider fp = new SimpleFilterProvider();
fp.addFilter(“user_json”, filter);

om.setFilters(fp);
当然,这个设置将对全局的ObjectMapper都起作用,我们也可以使用下面这种:
om.writer(fp).writeValueAsString(obj);
每次使用前再设置,这个也是全局作用域。

如果仅仅想要自己需要的属性,如下写法:
SimpleBeanPropertyFilter.filterOutAllExcept(“id”, “title”);

注意:addFilter的第一个参数,要用注解指写,比如:
@JsonFilter(“user_json”)
public class User {}
如果持久层使用的是hibernate,需要将hibernateLazyInitializer属性也排除。

四、反序列化
反序列化用的没有序列化多。我们先看普通对象的处理:
User u = om.readValue(json_str, User.class);
集合对象,处理方式不同,请看list的处理方式:
List uss = om.readValue(json_str, new TypeReference>() {});

五、图片等二进制类型的json转换
这个不用担心,jackson可直接完成转换,前提是:
你要用byte[]类型表示二进制数据,比如:private byte[] photo ;

当然,上面的的代码都是在线手工操作下的示例,jackson也是支持注解的,比如:排除属性,日期格式的定义等,都可以用注解的方式去实现,请大家自己so一下吧。