GSON是谷歌提供的开源库,用来解析Json格式的数据,非常好用。如果要使用GSON的话,则要先下载gson-2.2.4.jar这个文件,如果是在Android项目中使用,则在Android项目的libs目录下添加这个文件即可;如果是在Java项目中,则把gson-2.2.4.jar先添加到当前项目的任意一个包中,然后右键点击这个jar包 -> 构建路径 -> 添加至构建路径。这样准备工作就做好了。
1.工具类
/**
*
*封装Json解析工具类,提供范型参数
*/
class GsonUtil{
//将json数据 解析成相应的映射对象
public static <T> T parseJsonWithGson(String jsonData,Class<T> type){
Gson gson = new Gson();
T result = gson.fromJson(jsonData,type);
return result;
}
//将Json数组解析成相应的映射对列表
public static <T> List<T> parseJsonArrayWithGson(String jsonData, Class<T> type){
Gson gson = new Gson();
List<T> result = gson.fromJson(jsonData,new TypeToken<List<T>>().{}.getType() );
return result ;
}
}
(1)单条无嵌套Json数据的解析
eg:{“name”:“jz”,"age":20}
1.定义数据结构类:
public class Person {
private String name ;
private String age;
//提供变量的set和get方法
}
2. 创建Gson对象并解析:
1 String jsonData = "{\"name\":\"John\", \"age\":20}"; //注:这里也可以不使用转义字符,而用单引号:String jsonData = "{'name':'John', 'age':20}"; 2 Gson gson = new Gson(); 3 Person person = gson.fromJson(jsonData,Person.class);
String jsonData = "{'name':'John', 'age':20}"; Person person = GsonUtil.parseJsonWithGson(jsonData, Person.class);
(2)单条有嵌套的Json数据解析
eg:{"name":"John", "age":20,"grade":{"course":"English","score":100,"level":"A"}}
1、定义Student类:
1 class Student { 2 private String name; 3 private String age; 4 5 private Grade grade; 6 7 public class Grade { // 内部类要定义成public的 8 private String course; 9 private String score; 10 private String level; 11 12 public String getCourse() { 13 return course; 14 } 15 16 public void setCourse(String course) { 17 this.course = course; 18 } 19 20 public String getScore() { 21 return score; 22 } 23 24 public void setScore(String score) { 25 this.score = score; 26 } 27 28 public String getLevel() { 29 return level; 30 } 31 32 public void setLevel(String level) { 33 this.level = level; 34 } 35 36 // 重写toString方法 37 @Override 38 public String toString() { 39 return "Grade:[course = " + course + ", score = " + score 40 + ", level = " + level + "]"; 41 } 42 } 43 44 // 重写toString方法 45 @Override 46 public String toString() { 47 return "Student:[name = " + name + ", age = " + age + ", grade = " 48 + grade + "]"; 49 } 50 }
String jsonData = "{'name':'John', 'age':20,'grade':{'course':'English','score':100,'level':'A'}}"; Student student = GsonUtil.parseJsonWithGson(jsonData, Student.class);(三) 解析Json数组(多条Json数据)
例如: [{'name':'John', 'grade':[{'course':'English','score':100},{'course':'Math','score':78}]}, {'name':'Tom', 'grade':[{'course':'English','score':86},{'course':'Math','score':90}]}] //注:Json数组最外层一定要加"[]"
String jsonData = "[{'name':'John', 'grade':[{'course':'English','score':100},{'course':'Math','score':78}]},{'name':'Tom', 'grade':[{'course':'English','score':86},{'course':'Math','score':90}]}]"; List<Student> students = GsonUtil.parseJsonArrayWithGson(jsonData, Student.class);
2 class Student { 43 private String name; 44 private List<Grade> grade; // 因为grade是个数组,所以要定义成List 45 46 public class Grade { 47 private String course; 48 private String score; 49 50 public String getCourse() { 51 return course; 52 } 53 54 public void setCourse(String course) { 55 this.course = course; 56 } 57 58 public String getScore() { 59 return score; 60 } 61 62 public void setScore(String score) { 63 this.score = score; 64 } 65 66 } 67 68 public String getName() { 69 return name; 70 } 71 72 public void setName(String name) { 73 this.name = name; 74 } 75 76 public List<Grade> getGrade() { 77 return grade; 78 } 79 80 public void setGrade(List<Grade> grade) { 81 this.grade = grade; 82 } 83 } 如果数据结构这样子:(很重要)用下面这个:
- [{"title":"qq","aipPath":"/jeesite/2016/09/1474182626803_nbspd.aip","delFlag":"0","id":"7ef6815938394fce88a5873312b661e4","isNewRecord":false}]
- public static <T> List<T> getObjectList(String jsonString,Class<T> cls){
- List<T> list = new ArrayList<T>();
- try {
- Gson gson = new Gson();
- JsonArray arry = new JsonParser().parse(jsonString).getAsJsonArray();
- for (JsonElement jsonElement : arry) {
- list.add(gson.fromJson(jsonElement, cls));
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return list;
- }
借鉴:http://www.cnblogs.com/jiayongji/p/5297187.html
http://www.cnblogs.com/jianyungsun/p/6647203.html