在android开发中与服务器端的数据传输大多采用json格式,gson可以方便的进行java对象、json字符串的相互转化。项目地址:http://code.google.com/p/google-gson/
Gson使用简单,可以实现含有多层引用、继承的java对象与json间转化,还可以通过annotation进行选择性的属性转化
一、简单json转换
简单json转换(对象的全部属性均转换)通过以下方式
Gson gson = new Gson();//全部属性转换实例化
gson.toJson(user);//对象转化为json
gson.fromJson(json, User.class);//json转化为对象
gson.toJson(list);//list转化为json
gson.fromJson(json, new TypeToken<List<User>>(){}.getType());//json转化为list
Demo:
public class User implements Serializable{
private static final long serialVersionUID = 1L;
private Long id;
private String name;
private boolean isManager;
private List<User> userlist;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean isManager() {
return isManager;
}
public void setManager(boolean isManager) {
this.isManager = isManager;
}
public List<User> getUserlist() {
return userlist;
}
public void setUserlist(List<User> userlist) {
this.userlist = userlist;
}
}
import java.util.ArrayList;
import java.util.List;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
public class GsonTest {
Gson gson = new Gson();
/**
* 初始化User对象
* @return
*/
public User getUser(){
User user = new User();
user.setId(1l);
user.setManager(false);
user.setName("测试");
List<User> userlist = new ArrayList<User>();
for(int i=0;i<10;i++){
User temp = new User();
//temp.setId(2l*i); 设置一个null
temp.setManager(true);
temp.setName("测试"+i);
userlist.add(temp);
}
user.setUserlist(userlist);
return user;
}
/**
* 初始化属性不全的json串
* @return
*/
public String getUserJson(){
return "{\"id\":\"1\",\"isManager\":\"true\",\"name\":\"你好\",\"userlist\":[{\"id\":\"1\"}]}";
}
/**
* 初始化属性不全的json array
* @return
*/
public String getUserArrayJson(){
return "[{\"id\":\"1\",\"isManager\":\"true\",\"name\":\"你好\",\"userlist\":[{\"id\":\"1\"}]}]";
}
/**
* 初始化list
* @return
*/
public List<User> getUserList(){
List<User> userlist = new ArrayList<User>();
for(int i=0;i<10;i++){
User temp = new User();
//temp.setId(2l*i); 设置一个null
temp.setManager(true);
temp.setName("测试"+i);
userlist.add(temp);
}
return userlist;
}
/**
* json转化为对象
* @param json
* @return
*/
public User json2Object(String json){
User user = gson.fromJson(json, User.class);
return user;
}
/**
* 对象转化为json
* @param user
* @return
*/
public String object2Json(User user){
String str = gson.toJson(user);
return str;
}
/**
* list转化为json
* @param list
* @return
*/
public String list2Json(List<User> list){
return gson.toJson(list);
}
public List<User> json2List(String json){
return gson.fromJson(json, new TypeToken<List<User>>(){}.getType());
}
public static void main(String args[]){
GsonTest gsonTest = new GsonTest();
/**
* 对象转化为json
*/
System.err.println("------------对象转化为json-------------------");
String userJson = gsonTest.object2Json(gsonTest.getUser());
System.err.println(userJson);
/**
* json转化为对象
*/
System.err.println("------------json转化为对象-------------------");
User user = gsonTest.json2Object(gsonTest.getUserJson());
System.err.println("用户名:"+user.getName());
System.err.println("id:"+user.getId());
System.err.println("是否主管:"+user.isManager());
for(int i=0;i<user.getUserlist().size();i++){
System.err.println("员工姓名:"+user.getUserlist().get(i).getName());
System.err.println("员工id:"+user.getUserlist().get(i).getId());
}
/**
* list转化为json
*/
System.err.println("--------------list转化为json-----------------");
String userlistJson = gsonTest.list2Json(gsonTest.getUserList());
System.err.println(userlistJson);
/**
* json转化为list
*/
System.err.println("--------------list转化为json-----------------");
List<User> uselist = gsonTest.json2List(gsonTest.getUserArrayJson());
for(int i=0;i<uselist.size();i++){
System.err.println("员工姓名:"+uselist.get(i).getName());
System.err.println("员工id:"+uselist.get(i).getId());
for(int k=0;k<uselist.get(i).getUserlist().size();k++){
System.err.println("下一级员工姓名:"+uselist.get(i).getUserlist().get(k).getName());
System.err.println("下一级员工id:"+uselist.get(i).getUserlist().get(k).getId());
}
}
}
}