现在开发中服务端向客户端传送数据一般采用的是json数据,google官方的gson对于android开发来说再平常不过了,今天学习下其简单的使用(下载地址)。
先看下其简单的使用,首先定义一个简单JAVA类People(略)
Gson gson = new Gson() ;
People people = new People(1, "张三", "mldn", "110") ;
String jsonStr = gson.toJson(people) ;
System.out.println(jsonStr);
People p2 = gson.fromJson(jsonStr, People.class) ;
System.out.println(p2.name);
看下输出:
1.简单使用
JsonElement,其是一个抽象类,有两个有用的子类JsonObject和JsonArray。
JsonObject jsonPeople = new JsonObject() ;
jsonPeople.addProperty("id", 2);
jsonPeople.addProperty("name", "李四");
jsonPeople.addProperty("tel", "119");
jsonPeople.addProperty("address", "中国郑州");
System.out.println(jsonPeople);
看下输出结果,是不是很简单?
JsonArray array = new JsonArray() ;
for(int i = 0 ; i < 3 ; ++ i) {
JsonObject object = new JsonObject() ;
object.addProperty("id", i);
object.addProperty("name", "test" + i);
object.addProperty("tel", "test tel" + i);
object.addProperty("address", "test address" + i);
array.add(object);
}
System.out.println(array);
JsonObject allPeople = new JsonObject() ;
allPeople.add("allPeople", array);
System.out.println(allPeople);
根据json数组将其转为为list数组:
List<People> peopleList = gson.fromJson(array, new TypeToken<List<People>>() {}.getType()) ;
System.out.println(peopleList.size() + "\n" + peopleList.get(1).address);
2.过滤下不需要的字段
这部分基本上用不到,先了解吧
Ⅰ: 在对象中把字段用@Expose 注解,这样其他没有用此注解的字段通通都会过滤掉,当然还有一步关键的要实现,就是我们在实例化 Gson 的时候不能简单的new Gson() 了,而是需要用到
new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create() ;
Ⅱ: 直接用 构造方法
mGson = new GsonBuilder().setExclusionStrategies(new ExclusionStrategy() {
@Override
public boolean shouldSkipField(FieldAttributes f) {
//过滤掉字段名包含"id","address"的字段
return f.getName().contains( "id" )|f.getName().contains( "address" );
}
@Override
public boolean shouldSkipClass (Class<?> clazz) {
//过滤掉 类名包含 Bean的类
return clazz.getName().contains("Bean");
}
}).create();
Ⅲ:通过指定声明的权限来过滤,这里过滤掉声明为 protcted 的变量;
mGson = new GsonBuilder().excludeFieldsWithModifiers(Modifier.PROTECTED).create() ;
以上方法是 Gson 中使用到的,掌握了这几个基本上 Gson 的打包和解析 过滤字段问题就不是什么问题了;