`
lucane
  • 浏览: 121428 次
  • 性别: Icon_minigender_1
  • 来自: 江湖
社区版块
存档分类
最新评论

google-gson

阅读更多
    /**
     * 
     * 将bean转换成json串,bean中可以包含自定义属性,<br>
     * 转换后的json串是有层次结构的<br>
     * Date类型的将被按字符串赋给json串<br>
     * <link>http://sites.google.com/site/gson/Home</link>
     * 
     * @param bean
     * @return json串
     */
    public static String bean2json(Object bean) {
        Gson gson = new GsonBuilder().registerTypeAdapter(java.sql.Date.class,
                new SQLDateSerializer()).setDateFormat(DateFormat.LONG)
                .create();
        return gson.toJson(bean);
    }


SQLDateSerializer.class

public class SQLDateSerializer implements JsonSerializer<java.sql.Date> {

    public JsonElement serialize(java.sql.Date src, Type typeOfSrc,
            JsonSerializationContext context) {
        return new JsonPrimitive(src.toString());
    }
}
分享到:
评论
6 楼 風一樣的男子 2010-03-19  
jessige_27 写道
貌似 gson在Java对象和JSON对象互相转换的时候
并没有调用getter和setter 而是直接访问Java对象的属性
这就没给我们留下在中间干点什么的机会
怎么办呢?


确实没调用
Hibernate  lazy='true' 的死活转成的 json 串都是空的
必须要在转之前调用任意 getter
5 楼 jessige_27 2010-01-14  
貌似 gson在Java对象和JSON对象互相转换的时候
并没有调用getter和setter 而是直接访问Java对象的属性
这就没给我们留下在中间干点什么的机会
怎么办呢?
4 楼 kjj 2009-12-23  
如果我从服务端传来一个bean Collection,而这时,我想做通用的json解析器,这时我并不知道collection中存的是什么类型的bean,请问这种情况下怎么反序列化bean Collection!!
3 楼 lucane 2009-08-18  
关于泛型问题
序列化的时候很好处理

反序列化的时候,由于Java Type Erasure的原因
只能获得其raw type,这时候无法完成转换

以下是Gson User Guide原文:
Gson User Guide 写道
This works fine if the object is a non-generic type.
However, if the object is of a generic type,
then the Generic type information is lost because of Java Type Erasure.


我们需要利用TypeToken来明确告诉gson我们所需的类型

	@Test
	public void testGenericType() {
		List<String> holder = new ArrayList<String>();
		holder.add("Hello Gson");
		String json = JsonUtils.bean2json(holder);
		P.rintln(json);
		Type type = new TypeToken<List<String>>() {
		}.getType();
		Object obj = JsonUtils.json2bean(json, type);
		P.rintln(obj);
		P.rintln(obj.getClass());
	}
2 楼 lucane 2009-08-15  
序列化反序列化类Factory.class
	private String name;

	private Worker worker;

	private Set<Worker> workers;

	private List<Worker> lws;


UtilDateDeserializer.class
public class UtilDateDeserializer implements JsonDeserializer<java.util.Date> {

	public java.util.Date deserialize(JsonElement json, Type typeOfT,
			JsonDeserializationContext context) throws JsonParseException {
		return new java.util.Date(json.getAsJsonPrimitive().getAsLong());
	}
}


SQLDateDeserializer.class
public class SQLDateDeserializer implements JsonDeserializer<java.sql.Date> {

	public java.sql.Date deserialize(JsonElement json, Type typeOfT,
			JsonDeserializationContext context) throws JsonParseException {
		return new java.sql.Date(json.getAsJsonPrimitive().getAsLong());
	}
}


反序列化方法
	public static <T> T json2bean(String json, Type type) {
		Gson gson = new GsonBuilder().registerTypeAdapter(java.sql.Date.class,
				new SQLDateDeserializer()).registerTypeAdapter(
				java.util.Date.class, new UtilDateDeserializer())
				.setDateFormat(DateFormat.LONG).create();
		return gson.fromJson(json, type);
	}


测试代码
	private Worker worker;
	private Factory factory;

	@Before
	public void setUp() {
		worker = new Worker();
		worker.setName("你想");
		worker.setDob(new java.sql.Date(Calendar.getInstance()
				.getTimeInMillis()));
		worker.setInTime(Calendar.getInstance().getTime());

		Worker w2 = new Worker();
		w2.setName("改过");
		w2.setDob(new java.sql.Date(Calendar.getInstance().getTimeInMillis()));
		w2.setInTime(Calendar.getInstance().getTime());

		Worker w3 = new Worker();
		w3.setName("古古怪怪");
		w3.setDob(new java.sql.Date(Calendar.getInstance().getTimeInMillis()));
		w3.setInTime(Calendar.getInstance().getTime());

		List<Worker> lws = new ArrayList<Worker>();
		lws.add(worker);
		lws.add(w2);

		Set<Worker> sws = new HashSet<Worker>();
		sws.add(w3);
		sws.add(worker);
		sws.add(w2);

		factory = new Factory();
		factory.setName("IBM");
		factory.setWorker(worker);
		factory.setLws(lws);
		factory.setWorkers(sws);
	}

	@Test
	public void testSerializer() {

		String factoryJson = JsonUtils.bean2json(factory);

		P.rintln(factoryJson);

		Factory factoryCopy = (Factory) JsonUtils.json2bean(factoryJson,
				Factory.class);

		P.rintln(factoryCopy.getWorker().getInTime());
		P.rintln(JsonUtils.bean2json(worker));

		P.rintln(new java.sql.Date(1247625062171L));
		P.rintln(new java.util.Date(1247625621406L));

		String json = "{\"name\":\"改过\",\"dob\":1247626770406,\"inTime\":1247626770406}";
		Worker w4 = (Worker) JsonUtils.json2bean(json, Worker.class);
		P.rintln(w4.getName());
	}
1 楼 lucane 2009-07-15  
util.Date和sql.Date被转成长整形用于序列化传输

SQLDateSerializer.class
public class SQLDateSerializer implements JsonSerializer<java.sql.Date> {

	public JsonElement serialize(java.sql.Date src, Type typeOfSrc,
			JsonSerializationContext context) {
		return new JsonPrimitive(src.getTime());
	}
}


UtilDateSerializer.class
public class UtilDateSerializer implements JsonSerializer<java.util.Date> {

	public JsonElement serialize(java.util.Date src, Type typeOfSrc,
			JsonSerializationContext context) {
		return new JsonPrimitive(src.getTime());
	}
}


序列化方法
public static String bean2json(Object bean) {
		Gson gson = new GsonBuilder().registerTypeAdapter(java.sql.Date.class,
				new SQLDateSerializer()).registerTypeAdapter(
				java.util.Date.class, new UtilDateSerializer()).setDateFormat(
				DateFormat.LONG).create();
		return gson.toJson(bean);
	}


序列化后如下
{"name":"改过","dob":1247626770406,"inTime":1247626770406}


序列化反序列化类Worker.class
	private String name;

	private java.sql.Date dob;

	private java.util.Date inTime;

相关推荐

    google-gson-2.2.4.zip

    这个"google-gson-2.2.4.zip"压缩包包含了Gson库的2.2.4版本,这是一个广泛使用的稳定版本,适用于各种项目需求。Gson库允许开发者将Java对象转换为对应的JSON字符串,反之亦然,使得数据交换和存储变得更加便捷。 ...

    google-gson-2.2.2

    这个"google-gson-2.2.2"版本是Gson的一个具体发行版,它提供了对XML数据的解析功能。在Java开发中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,被广泛应用于网络服务之间以及客户端与服务器...

    google-gson-2.1 jar包 + 使用教程.pdf

    这个“google-gson-2.1.jar”包包含了Gson库的版本2.1,这是一个稳定且广泛使用的版本,适合各种项目集成。附带的“gson使用教程.pdf”提供了详细的指南,帮助开发者快速掌握Gson的用法。 Gson的核心功能包括: 1....

    google-gson-2.2.4

    这个"google-gson-2.2.4"版本是Gson库的一个稳定发行版,发布于几年前,但至今仍被许多项目所使用。在这个版本中,我们可以期待一些关键功能和优化。 首先,Gson库的核心功能是将Java对象转换为对应的JSON字符串,...

    google-gson-1.6.jar

    在给定的压缩包文件中,除了主文件`google-gson-1.6.jar`之外,还有一个名为`google-gson-stream-1.6.jar`的文件。这个文件包含了Gson的流处理支持,允许开发者处理大量数据或流式数据,而不必将整个JSON字符串一次...

    google-gson-2.1-release.zip+例子

    这个"google-gson-2.1-release.zip+例子"压缩包包含了Gson库的2.1版本以及相关的示例代码,帮助开发者更好地理解和使用这个库。 首先,我们来看一下Gson的核心功能。Gson库提供了`Gson`类,它是整个库的主要入口点...

    google-gson-2.2.4-release(压缩包含原版压缩包和官网下载地址)

    标题中提到的"google-gson-2.2.4-release"是Gson的一个特定版本,发布于2014年。这个版本包含了Gson库的所有源代码和必要的构建文件,方便开发者在自己的项目中集成和定制。同时,压缩包内还提供了一个名为"官网下载...

    google-gson-2.2.2Jar包

    这个"google-gson-2.2.2Jar包"是Gson库的一个特定版本,版本号为2.2.2。在Java开发中,它被广泛应用于网络数据的传输、存储以及在应用内部进行数据序列化和反序列化。 Gson的核心功能主要包括以下几个方面: 1. **...

    google-gson.chm

    这是google-gson的一个chm的帮助文档,文档是纯英文的,内容非常的全面,详细的介绍了gson的使用方法

    google-gson-2.2.4-api

    google-gson-2.2.4-api,This package provides the Gson class to convert Json to Java and vice-versa.

    google-gson-2.2.2-release

    这个"google-gson-2.2.2-release"压缩包包含三个关键组件:gson-2.2.2.jar(核心库),gson-2.2.2-javadoc.jar(API文档)和gson-2.2.2-sources.jar(源代码)。这些资源为开发者提供了全面的支持,以便在项目中轻松...

    Google-gson-2.1

    "Google-gson-2.1"是Gson库的一个特定版本,发布于2013年,包含了一些重要的特性和改进。 首先,Gson的核心功能是对象到JSON和JSON到对象的转换。使用Gson,你可以轻松地将Java对象序列化为JSON字符串,以便在网络...

    google-gson-stream-1.6

    android json 解析 ,希望大家好好学习啊

    converter-gson-2.9.0.jar / retrofit-2.9.0.jar

    Gson是Google提供的一个开源库,用于在Java对象和JSON数据之间进行映射。在Android开发中,Gson广泛用于将Java对象序列化为JSON字符串,或者将JSON字符串反序列化为Java对象。Gson 2.9.0版本也包含了性能优化和bug...

    google-gson-2.2.4.jar及多种示例代码

    这个"google-gson-2.2.4.jar"是Gson库的一个特定版本,发布于2014年,它包含了丰富的功能,允许开发者在Java应用程序中方便地处理JSON数据。 首先,让我们了解一下Gson的核心概念。Gson库的核心类有`Gson`,它是...

    Google-Gson 2.2.4

    Google-Gson 2.2.4是Google公司开发的一个Java库,其主要功能是将Java对象转换为JSON字符串,同时也可以将JSON数据解析为等效的Java对象。这个版本(2.2.4)是Gson的一个稳定版本,广泛应用于Android和Java项目中,...

    Google-gson-2.8.2

    标题 "Google-gson-2.8.2" 指的是 Google Gson 库的一个特定版本,即 2.8.2。Gson 是一个由 Google 开发的 Java 类库,它的主要功能是处理 JSON(JavaScript Object Notation)数据格式。JSON 是一种轻量级的数据...

Global site tag (gtag.js) - Google Analytics