首页 > 学院 > 开发设计 > 正文

json-lib 过滤二级属性

2019-11-08 18:42:22
字体:
来源:转载
供稿:网友

相用json-lib 过滤属性,网上搜了一下,都是过滤第一级别的,需要重写 config,filed 什么的。觉得很麻烦,然后搜了下别的实现方案,阿里巴巴的 fastjson 很不错

实现如下:

 

SimplePRopertyPreFilter filter = new SimplePropertyPreFilter(TTown.class, "id","townname");      response.getWriter().write(JSONObject.toJSONString(townList,filter)); 只要指定二级属性的类名就可以了,很方便。但是如果就想用json-lib 怎么弄呢?

我不想改config ,filter什么的,于是自己写

public class Test {		public static void main(String[] args) throws Exception {						Entity e1 = new Entity();		e1.setAge(1);		e1.setId(1);		e1.setName("e1");		e1.setSex("male");				Entity e2 = new Entity();		e2.setAge(2);		e2.setId(2);		e2.setName("e2");		e2.setSex("female");				List<Entity> list = new ArrayList<Entity>();		list.add(e1);		list.add(e2);				Map map = new HashMap();		map.put("id", 1);		map.put("name", "bruce");		map.put("list", list);				JSONObject json = JSONObject.fromObject( map );  		System.out.println(json.toString());		//-----------------------------------		String[] names = {"sex"};		map = convert(map,names);		System.out.println("---------------------");		json = JSONObject.fromObject( map );  		System.out.println(json.toString());	}		 static Map convert(Map para,String[] names) throws Exception{				List<Map> result = new ArrayList<Map>();		List list = (List) para.get("list");				for(Object ob :list){			Map map = new HashMap();			Field[] fs = ob.getClass().getDeclaredFields();			for(Field f : fs){				if(!contains(names, f.getName())){					f.setaccessible(true); //设置些属性是可以访问的  			        Object val = f.get(ob);					map.put(f.getName(), val);				}			}			result.add(map);		}				para.put("list", result);		return para;	}		static boolean contains(String[] strs ,String str){		if(null == strs || strs.length == 0){			return false;		}				for(int i=0;i<strs.length;i++){			if(strs[i].equals(str)){				return true;			}		}		return false;	}	}大体思路是 将list 中的实体遍历,利用反射过滤属性,生成一个新的map .塞回list中。然后再把新的list赋值给原始的map。生成json 。运行结果如下:

{"name":"bruce","id":1,"list":[{"sex":"male","name":"e1","id":1,"age":1},{"sex":"female","name":"e2","id":2,"age":2}]}---------------------{"name":"bruce","id":1,"list":[{"name":"e1","id":1,"age":1},{"name":"e2","id":2,"age":2}]}

将二级属性list 中的 sex 属性过滤掉了


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表