Gson实践

在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());
			}
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值