欢迎光临Software MyZone,有问题可留言或到站点论坛发帖,争取第一时间帮忙解决 || 站点论坛:火龙论坛 || 淘宝小店:应小心的易淘屋 【欢迎大家提建设性意见】

Gson的简单使用方法

欢迎热爱编程的朋友们参与到cocos2d-x编程中,为了给大家提供良好的交流环境,网站以开启QQ群
Software MyZone:66202765(群号,欢迎加入,若满,请加1群)
Software MyZone 1群(2dx):286504621
Software MyZone 2群(山东):204954191
Software MyZone【Java群】:162865493
【加群请写:Software MyZone或者是firedragonpzy】
淘宝店:【应小心的易淘屋】初次开店,大家多多支持……
群论坛:【火龙论坛】正试运营阶段,欢迎大家多提些建设性意见……
群问答:【火龙问答】正试运营阶段,欢迎大家多提些建设性意见……
摘自【有改动】:http://www.cnblogs.com/happyPawpaw/archive/2012/10/23/2735697.html

我的digitalocean推广链接:https://www.digitalocean.com/?refcode=65dfdb158f1a,Everyone you refer gets $10 in credit,从此链接注册,你将获得10美元。

Gson和其他现有java json类库最大的不同时gson需要序列化得实体类不需要使用annotation来标识需要序列化得字段,同时gson又可以通过使用annotation来灵活配置需要序列化的字段。

下面是一个简单的例子:

 

public class Person {

    private String name;
    private int age;

    /**
     * @return the name
     */
    public String getName() {
        return name;
    }

    /**
     * @param name the name to set
     */
    publicvoid setName(String name) {
        this.name = name;
    }

    /**
     * @return the age
     */
    publicint getAge() {
        return age;
    }

    /**
     * @param age the age to set
     */
    publicvoid setAge(int age) {
        this.age = age;
    }
    
    @Override
    public String toString()
    {
        return name +":"+age;
    }
}

实体很简单,两个字段,当然实体中的字段也可以是List或者Set类型的。

 

Gson gson =new Gson();
List<person> persons = new ArrayList< person >();
for (int i = 0; i < 10; i++) {
     Person p =new Person();
     p.setName("name"+ i);
     p.setAge(i *5);
     persons.add(p);
}
String str = gson.toJson(persons);

上面的代码重点是Gson对象,它提供了toJason()方法将对象转换成Json字符串,上面代码的str对象值为:

[{"name":"name0","age":0},{"name":"name1","age":5},{"name":"name2","age":10},{"name":"name3","age":15},{"name":"name4","age":20},{"name":"name5","age":25},{"name":"name6","age":30},{"name":"name7","age":35},{"name":"name8","age":40},{"name":"name9","age":45}]

很标准的json数据,很简单吧,呵呵。

下面来看看gson的反序列化,Gson提供了fromJson()方法来实现从Json相关对象到java实体的方法。

在日常应用中,我们一般都会碰到两种情况,转成单一实体对象和转换成对象列表或者其他结构。

先来看第一种:

比如json字符串为:[{"name":"name0","age":0}]

代码:

 

Person person = gson.fromJson(str, Person.class);

提供两个参数,分别是json字符串以及需要转换对象的类型。

第二种,转换成列表类型:

代码:

 

List<person> ps = gson.fromJson(str, new TypeToken<list <Person>>(){}.getType());
for(int i = 0; i < ps.size() ; i++)
{
     Person p = ps.get(i);
     System.out.println(p.toString());
}

可以看到上面的代码使用了TypeToken,它是gson提供的数据类型转换器,可以支持各种数据集合类型转换。

 

注意:记得使用Gson的时候记得进行编码转化,方式如下:

方法一:

   	<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
		<property name="messageConverters">
			<list>
				<bean class="org.springframework.http.converter.StringHttpMessageConverter">
					<property name="supportedMediaTypes">
						<list>
							<value>application/json;charset=UTF-8</value>
						</list>
					</property>
				</bean>
			</list>
		</property>
	</bean>  

控制台转换信息如下:

Written [[{"id":1,"name":"台式机","price":3500.0,"createtime":"Feb 3, 2015 1:22:53 PM","detail":"该电脑质量非常好!!!!"},{"id":2,"name":"笔记本","price":6020.0,"createtime":"Feb 9, 2015 1:22:57 PM","detail":"笔记本性能好,质量好!!!!!"}]] as “application/json;charset=UTF-8″ using [org.springframework.http.converter.StringHttpMessageConverter@6deee615] 针对时间类型datetime,返回的是”Feb 3, 2015 1:22:53 PM”,不是我们需要的,

方法二:
请参考:Spring MVC 3.1 之后如何配置messageConverters

关于spring mvc返回json的其他方式可以参考:
SpringMVC返回json数据的三种方式

Tags: ,