关于json数据和bean之间的转换
在开发中, 我们的每个程序,都必不可少的使用到了json和bean数据。传输的时候,我们首选使用json来装载数据传输,但是在java中,我们更习惯于使用bean来对数据进行操作,这样更加方便和简单。所有这里就涉及到一个两个不同数据类型的转换。
googol给我们提供了一个转换的工具类--gson。用这个工具,我们可以很快的进行类型转换,下面是我模拟一个用户的user类和json的转换。
首先我们要建立一个bean实体类:
/**
* Created by tanksu on 16/5/25.
*/
public class User implements Serializable {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
这是一个很简单的user类,只有两个属性:name 和 age。我们对此只做一个简单示例。
转换的具体操作如下,具体的代码讲解 ,都在注视里面了,可以认真查看:
public void test() {
//一般情况下,我们从服务器返回来的数据是json数据,所以我们需要把它转换成bean对应的实体类
//这里有一点要注意的是,我们进行一般的转换,需要json和bean的属性数量和属性类型和名称都要对应完全一致
//否则可能会报错
String resJson = "[{\"name\":\"jack\",\"age\":20}] ";
Gson gson = new Gson();
User user = gson.fromJson(resJson, User.class);//将json数据转换成user类实体
System.out.println("-=-=-=->>user.toString = " + user.toString());
//结果:User{name='jack',age=20} 可以取出单个数据:user.getName();user.getAge();
User user1 = new User("rose", 32);
String strUser1 = gson.toJson(user1);//将bean数据转换成json数据
System.out.println("-=-=-=->>strUser1 = " + strUser1);
//结果:[{"name":"rose","age":32}]
//这里还有另外一种情况,我们注意到在name里面有一个@Expose修饰词,而age里面没有
//因为这里考虑到这种情况:我们并不需要将所有的数据转换成json活着bean,只需要部分转换就够了
//我们就需要用到这个属性,以及下面的代码
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.excludeFieldsWithoutExposeAnnotation();// 不转换没有 @Expose 注解的字段
Gson gson1 = gsonBuilder.create();
User user2 = gson1.fromJson(resJson, User.class);
System.out.println("-=-=-=->>user2.toString() = " + user2.toString());
//结果:User{name='jack',"age":0} ,可以看到这里的age没有被赋值,默认为0
String strUser2 = gson1.toJson(user1);
System.out.println("-=-=-=>>strUser2 = " + strUser2);
//结果:[{"name":"rose"}],可以看到只转换了name属性
}
这个转换,看起来并不难,但是在应用中大有用处。希望大家可以熟练掌握此技能。