您的位置:首页 > 其它

GSON学习笔记

2016-05-22 10:33 225 查看
在Android开发中,我们Android客户端如果要和服务器端交互,一般都会采用json数据格式进行交互,json对于大家来说都不陌生,本文讲述一下关于gson,gson和其他现有java json类库最大的不同时gson需要序列化得实体类不需要使用annotation来标识需要序列化得字段,同时gson又可以通过使用annotation来灵活配置需要序列化的字段。

举一个简单的例子:

一个实体类 Person.java,参考代码如下:

1 public class Person {

2 private String name;

3 private int age;

4 public String getName() {

5 return name;

6 }

7 public void setName(String name) {

8 this.name = name;

9 }

10 public int getAge() {

11 return age;

12 }

13 public void setAge(int age) {

14 this.age = age;

15 }

16 @Override

17 public String toString()

18 {

19 return name + ":" +age;

20 }

21 }

我们给这个类赋值,看看如何使用gson如何使用:

1.gson生成Json字符串

1 Gson gson = new Gson();//实例化gson

2 List<Person> persons = new ArrayList<Person>();

3 for (int i = 0; i < 10; i++) {

4 Person p = new Person();

5 p.setName("name" + i);

6 p.setAge(i * 5);

7 persons.add(p);

8 }

9 String str = gson.toJson(persons);//转换json

说明:上面代码主要说明gson的使用,它提供了toJason()方法将对象转换成Json字符串,转换出来就是很标准的json字符串.

2.gson如何将json字符串转换成java实体类

Gson提供了fromJson()方法来实现从Json相关对象到java实体的方法。

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

1)转换单一java实体如何实现

比如json字符串为:[{"name":"张三","age":20}],那么转换方式如下:

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

2)转换成列表类型

如果一个类中只有一个属性,并且这个属性是一个集合。如下:

public class DeviceInMapData implements Serializable{

public ArrayList<DeviceInfo>
deviceInfos;

public class DeviceInfo{

String
id;

float longitude;

float latitude;

Boolean
isWran;

int spdStatus;

float lightningValue;

}

}

则不能使用上面第一种解析方式。会报json解析语法错误。只有使用下面这种方式。

比如json字符串为:[{"name":"张三","age":20},{"name":"李四","age":15},{"name":"王五","age":21}]

1 List<Person> ps = gson.fromJson(str, new TypeToken<List<Person>>(){}.getType());

2 for(int i = 0; i < ps.size() ; i++)

3 {

4 Person p = ps.get(i);

5 System.out.println(p.toString());

6 }

说明:上面的代码使用了TypeToken,它是gson提供的数据类型转换器,可以支持各种数据集合类型转换。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: