FastJSON使用笔记
虽然使用FastJSON来生成JSON数据非常简单
最常用的的方法就是JSON.toJSONString()静态方法,这个方法参数可以给一个String,也可以是一个int,也可以给一个Object类型(包括集合数组),也可以是一个JavaBean 等等,说明其存在多个重载方法
Admin admin2=adminService.findByName(admin.getAdminName()); String json = JSON.toJSONString(admin2); ServletActionContext.getResponse().setContentType("application/json;charset=utf-8"); ServletActionContext.getResponse().getWriter().write(json); return NONE;
但是我在实际使用过程中还是发现了一些值得注意的地方,比如说:之前写过的JQuery解析FastJSON生成的JSON数据会出现的错误
今天我要记录下一些注意点
将对象转化为json字符串时,如何过滤掉部分字段?
方法一:
在JavaBean对象对应字段前加注解,这样生成的json也不包含该字段
@JSONField(serialize=false) private String userName;
方法二:
在需要生成JSON的时候使用fastjson的过滤器
PropertyFilter profilter = new PropertyFilter(){ @Override public boolean apply(Object object, String name, Object value) { if(name.equalsIgnoreCase("age")){ //false表示age字段将被排除在外 return false; } return true; } }; json = JSON.toJSONString(user, profilter); System.out.println(json);
我个人推荐使用第二种,虽然代码多了些,但是如果出现该字段有需要不进行过滤的情况,就不太灵活了
格式化日期时间
再将数据库中的日期时间生成JSON的时候,可能会出现以毫秒或者是格式不一致的问题,应该如何指定使用的日期时间格式?就要使用@JSONField注解中的format属性了
还是在JavaBean的日期时间字段使用注解
//通过注解对日期转化为JSON进行格式化 @JSONField (format="yyyy-MM-dd HH:mm:ss") private Date date;
解析JSON
fastJSON也可以将JSON解析为所对应的JavaBean,使用的是JSON类的parseObject静态方法。
我在src下放入一段JSON数据:
{
"userName":"lz",
"password":"321",
"birthday":"2017-07-29 13:50:22",
"jineng":[
"Struts2","springMVC"
]
}
并写好对应的JavaBean,在JavaBean中jineng属性使用的List集合
测试的方法:
@Test public void fun4() throws Exception{ String path = MyTest.class.getResource("/test.json").getFile(); File file=new File(path); String json = FileUtils.readFileToString(file); User user=JSON.parseObject(json, User.class); System.out.println(user.getJineng()); System.out.println(user.getJineng().getClass()); }
输出结果:
[Struts2, springMVC]
class java.util.ArrayList
最终fastJSON将数据封装到JavaBean中,同时也完成了对集合属性的具体化