JSON(3)Google解析Json库Gson

mac2022-07-01  7

1.资料

  官网:  http://groups.google.com/group/google-gson

  代码:  https://github.com/google/gson

  jar包下载: http://search.maven.org/#artifactdetails|com.google.code.gson|gson|2.3.1|jar

2.导入

  在as工程属性中找最新的gson库,或者直接在module的build.gradle中引入gson库.

1 dependencies { 2 implementation fileTree(include: ['*.jar'], dir: 'libs') 3 implementation 'com.android.support:appcompat-v7:27.1.1' 4 implementation 'com.android.support.constraint:constraint-layout:1.1.2' 5 //... 6 implementation 'com.google.code.gson:gson:2.8.5' 7 }

3 json反列化

3.1准备对象

1 public class Person { 2 3 private String name; 4 private int age; 5 6 /** 7 * @return the name 8 */ 9 public String getName() { 10 return name; 11 } 12 13 /** 14 * @param name the name to set 15 */ 16 public void setName(String name) { 17 this.name = name; 18 } 19 20 /** 21 * @return the age 22 */ 23 public int getAge() { 24 return age; 25 } 26 27 /** 28 * @param age the age to set 29 */ 30 public void setAge(int age) { 31 this.age = age; 32 } 33 34 @Override 35 public String toString() 36 { 37 return name + ":" +age; 38 } 39 }

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

3.2 生成Json字符串

1 //生成Json字符串 2 3 Gson gson = new Gson(); 4 List<Person> persons = new ArrayList<Person>(); 5 for (int i = 0; i < 10; i++) { 6 Person p = new Person(); 7 p.setName("name" + i); 8 p.setAge(i * 5); 9 persons.add(p); 10 } 11 String json = gson.toJson(persons);

   上面的代码重点是Gson对象,它提供了toJson()方法将对象转换成Json字符串,可以这个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}]

4.反序列化

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

  在日常应用中,通常转成单一实体对象和转换成对象列表或者其他结构。

4.1反序列化一个对象

  当返回的是简单对象(只一个对象)时用gson.fromJson(string,xx.class); //提供两个参数,分别是json字符串以及需要转换对象的类型

比如json字符串为:

[{"name":"name0","age":0}]

代码:

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

4.2 反序列成列表

  当返回的是复杂对象,要用AVA泛型时,如有个集合(0-n)要用gson.fromJson(string,new TypeToken<XXX>(){}.getType());

代码:

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提供的数据类型转换器,可以支持各种数据集合类型转换。

 

转载于:https://www.cnblogs.com/sjjg/p/4714221.html

最新回复(0)