package test;

import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import com.google.gson.ExclusionStrategy;
import com.google.gson.FieldAttributes;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

public class JsonUtil {

	public static String tojsonList(List<?> list, String count,
			String listName, String countName) {

		Person student2 = new Person();
		student2.setId(2);
		student2.setName("曹贵生");
		student2.setBirthDay(new Date());

		Person student3 = new Person();
		student3.setId(3);
		student3.setName("柳波");
		student3.setBirthDay(new Date());

		// student3.setChild(student2);

		List<Person> myList = new ArrayList<Person>();
		myList.add(student2);
		myList.add(student3);

		String[][] arr = { { "1", "111" }, { "2", "222" } };

		Map<String, Object> map = new LinkedHashMap<String, Object>();
		// map.put("totalProperty", myList.size());
		// map.put("dic", arr);
		// map.put("bean", student2);
		map.put("list", myList);

		Gson gson = new Gson();
		// 设置要输出的属性
		final String regUser = "|id|";

		// 创建一个带过滤条件的gson对象
		Gson gson2 = new GsonBuilder().setExclusionStrategies(
				new ExclusionStrategy() {
					/**
					 * 设置要过滤的属性
					 */
					@Override
					public boolean shouldSkipField(FieldAttributes attr) {
						// 我们只过滤User类的id属性，而Type类的id属性还是要输出的
						boolean b = false;
						// 如果当前属性所在的类是User的话，就使用regUser过滤
						// 否则就用regOther来过滤
						if (attr.getDeclaringClass() == Person.class) {
							b = regUser.contains("|" + attr.getName() + "|");
						}
						// 这里，如果返回true就表示此属性要过滤，否则就输出
						return b;
					}

					/**
					 * 设置要过滤的类
					 */
					@Override
					public boolean shouldSkipClass(Class<?> clazz) {
						// 这里，如果返回true就表示此类要过滤，否则就输出
						return false;
					}
				}).create();

		String json = gson2.toJson(map);
		return json;
	}

	public static void main(String[] args) {
		String json = JsonUtil.tojsonList(null, null, null, null);
		System.out.println(json);
	}

}
