使用Gson或者GsonBuilder实现JSON和Java对象之间的转换

看一下demo

public static void main(String[] args) {
//		Gson gson = new Gson();
		Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
		Student student = new Student(11, "zhangsan", new  Date());
		Student stu1 = new Student(12, "lisi", new Date());
		Student stu2 = new Student(13, "wangwu", new Date());
		Student stu3 = new Student(14, "weili", new Date());
		List<Student> list = new ArrayList<Student>();
		list.add(student);
		list.add(stu1);
		list.add(stu2);
		list.add(stu3);
		String jsonStr = gson.toJson(student, Student.class);
		System.out.println(jsonStr );
		String jsonListStr = gson.toJson(list);
		System.out.println(jsonListStr);
		
		System.out.println("===================分隔符======================");
		String jsonSrc = "{\"age\":11,\"name\":\"zhangsan\",\"bir\":\"2014-12-05 16:46:50\"}";
		Student stu = gson.fromJson(jsonSrc, Student.class);
		System.out.println(stu);
		
		List<Student> stuList = gson.fromJson(jsonListStr, new TypeToken<List<Student>>() {
		}.getType());
		System.out.println("========反序列化json数组==========");
		System.out.println(stuList);
	}


上面的是示例代码,Student是一个POJO,

public class Student {
	
	private int age;
	
	private String name;
	
	@Expose(serialize = true, deserialize = false)
	@SerializedName("bir")
	private Date birthday;

	public Student(int age, String name, Date birthday) {
		this.age = age;
		this.name = name;
		this.birthday = birthday;
	}

	public Student(int age, String name) {
		this.age = age;
		this.name = name;
	}
	
	@Override  
    public String toString() {  
        if (birthday == null) {  
            return "{\"name\":" + name + ", \"age\":" + age + "}";  
        } else {  
            return "{\"name\":" + name + ", \"age\":" + age + ", \"birthday\":" + birthday.toString() + "}";  
        }  
    }  
}

说明:

1、如果是创建普通的Gson对象,可以之间使用Gson gson = new Gson(),如果需要加入自己的一些设置,可以使用GsonBuilder来创建Gson实例,例如,本实例中,希望将时间对象序列化为

yyyy-MM-dd HH:mm:ss这种格式的字符串。

2、将对象序列化为JSON对象比较简单,直接调用gson.toJson(Obj)即可。如果pojo没有作特殊设置,将序列化为默认的形式。

如果将json对象反序列化为java对象,需要设置待序列化对象的类型,例如

String jsonStr = gson.toJson(student, Student.class);

将json反序列化为普通pojo,

如果将json字符串反序列化为集合,则需要构建Type对象,例如:

List<Student> stuList = gson.fromJson(jsonListStr, new TypeToken<List<Student>>() {
		}.getType());
这里是一个泛型,new TypeToken<T>(){ }.getType() ,T为待序列化为的类型。比如这里,反序列化之后的类型为集合。







比较简单的JSONBuilder:(.net 2.0, jdk1.5) - 只有两个文件:JSONBuilder(.cs,.java) , JSONBuilderDelegates(.cs,.java) - 不用考虑对象嵌套输出格式的匹配问题 - 自动字符串转义 - 支持常见数据类型、以及常用的数据结构如: 任意数组(Array),IMap,IList,IEmutable等 - 支持任意扩展,通过注册自定义类型的转换方法(参看JSONBuilderTest(.cs,.java) 和 JSONBuilderDelegates(.cs,.java))可支持任意类型的json字符串转换 - 支持自定义的包含 public string toJSON() 的对象的输出(忽略大小写) - 带有测试的VS2005和Eclispe完整项目 - 版权:可任意使用、分发、改良(只要包含原作者信息) // 转换回调函数接口 --> JSONBuilderDelegates.cs public delegate string JSONBuilderDelegates(object value, bool useSingleQuote); 或 --> JSONBuilderDelegates.java public static String JSONBuilderDelegates(Object value, boolean useSingleQuote); //-->JSONBuilderTest.cs (JSONBuilderTest.java) 比如 .net: //demo custom class public class CustomClass { public string name = "Hu Changwei"; public string nickName = "koqiui"; public string email = "koqiui@163.com"; public string gender = "male"; public bool married = true; public DateTime birthDate = new DateTime(1978, 5, 21); } //demo custom json convertor public static string fromCustomClass(object value, bool useSingleQuote) { if (value == null) { return JSONBuilder.NullStr; } if (value.GetType() == typeof(CustomClass)) { CustomClass objValue = value as CustomClass; JSONBuilder jb = new JSONBuilder(useSingleQuote); jb.startObject(); // jb.add("Author", objValue.name); jb.add("nickname", objValue.nickName); jb.add("email", objValue.email); jb.add("married", objValue.married); jb.add("birthdate", objValue.birthDate); // jb.endObject(); return jb.toJSON(); } return JSONBuilder.NullStr; } [Test] public void test_customConvertor() { JSONBuilder.setJSONConvertor(typeof(CustomClass), new ToJSONDelegate(fromCustomClass)); JSONBuilder jb = new JSONBuilder(); jb.addValue(new CustomClass()); Console.WriteLine(jb.toJSON()); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值