Gson基本用法
来源:互联网 发布:淘宝卖家如何发货 编辑:程序博客网 时间:2024/06/04 19:47
Gson是Google的一个Java开源库,利用序列化和反序列化技术,实现json字符串和Java对象间的转换。
AndroidStudio的build.gradle文件中配置compile 'com.google.code.gson:gson:2.8.0',Rebuild后即可导入库文件。
实例一:基本类型
{"name":"mrxi","age":"24","gender":1,"school":"bupt"}
Student类:
package com.xi.liuliu.testgson;/** * Created by liuliu on 2017/6/16. */public class Student { private String name; private String age; private int gender; private String school; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public int getGender() { return gender; } public void setGender(int gender) { this.gender = gender; } public String getSchool() { return school; } public void setSchool(String school) { this.school = school; } @Override public String toString() { return "name:" + getName() + " age:" + getAge() + " gender:" + getGender() + " school:" + getSchool(); }}
Student类的成员变量名要和json中的key一致,成员变量类型要和json中的value类型一致;并且要生成getter和setter方法。
使用如下:
public void testGson(String json) { Gson gson = new Gson(); Student student = gson.fromJson(json,Student.class); System.out.println(student); }
也可以使用泛型:
public <T> T parseJsonWithGson(String jsonData, Class<T> type) { Gson gson = new Gson(); T result = gson.fromJson(jsonData, type); return result; } public void testGson(String json) { Student student = parseJsonWithGson(json, Student.class); }
实例二:json中嵌套json
{"name":"mrxi","age":"24","gender":1,"school":"bupt","grade":{"course":"English","score":100,"level":"A"}}
student类:
package com.xi.liuliu.testgson;/** * Created by liuliu on 2017/6/16. */public class Student { private String name; private String age; private int gender; private String school; private Grade grade; public Grade getGrade() { return grade; } public void setGrade(Grade grade) { this.grade = grade; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public int getGender() { return gender; } public void setGender(int gender) { this.gender = gender; } public String getSchool() { return school; } public void setSchool(String school) { this.school = school; } @Override public String toString() { return "name:" + getName() + " age:" + getAge() + " gender:" + getGender() + " school:" + getSchool(); }}
Grade类:
package com.xi.liuliu.testgson;/** * Created by liuliu on 2017/6/16. */public class Grade { private String course; private String score; private String level; public String getCourse() { return course; } public void setCourse(String course) { this.course = course; } public String getScore() { return score; } public void setScore(String score) { this.score = score; } public String getLevel() { return level; } public void setLevel(String level) { this.level = level; }}
嵌套的json要新建Grade类,Student新增grade成员变量,并添加getter和setter方法。使用和实例一相同。
实例三:json中包含jsonArray
{"name":"mrxi","age":"24","gender":1,"school":"bupt","grade":[{"course":"English","score":100,"level":"A"},{"course":"Math","score":90,"level":"A"}]}
Student类:
package com.xi.liuliu.testgson;import java.util.List;/** * Created by liuliu on 2017/6/16. */public class Student { private String name; private String age; private int gender; private String school; private List<Course> grade; public List<Course> getGrade() { return grade; } public void setGrade(List<Course> grade) { this.grade = grade; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public int getGender() { return gender; } public void setGender(int gender) { this.gender = gender; } public String getSchool() { return school; } public void setSchool(String school) { this.school = school; } @Override public String toString() { String grades = null; for (Course course : grade) { grades = grades + course.toString(); } return "name:" + getName() + " age:" + getAge() + " gender:" + getGender() + " school:" + getSchool() + "grade:" + grades; }}
Course类:
package com.xi.liuliu.testgson;/** * Created by liuliu on 2017/6/16. */public class Course { private String course; private String score; private String level; public String getCourse() { return course; } public void setCourse(String course) { this.course = course; } public String getScore() { return score; } public void setScore(String score) { this.score = score; } public String getLevel() { return level; } public void setLevel(String level) { this.level = level; } @Override public String toString() { return "course:" + getCourse() + "score:" + getScore() + "level:" + getLevel(); }}
使用和实例一中相同。
public <T> T parseJsonWithGson(String jsonData, Class<T> type) { Gson gson = new Gson(); T result = gson.fromJson(jsonData, type); return result; } public void testGson(String json) { Student student = parseJsonWithGson(json, Student.class); System.out.println(student); }
grade字段是一个jsonArray,jsonArray用List表示,jsonArray中每一项都是Course。
其他常用用法:
1 字段名的对应
有时接口返回的字段命名和我们的编码风格不一致,如服务端返回{"user_name":"mrxi","login_password":"asdf123"},为了继续使用驼峰标识,我们可以这样:
package com.xi.liuliu.testgson;import com.google.gson.annotations.SerializedName;/** * Created by liuliu on 2017/6/16. */public class User { @SerializedName("user_name") private String userName; @SerializedName("login_password") private String loginPassword; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getLoginPassword() { return loginPassword; } public void setLoginPassword(String loginPassword) { this.loginPassword = loginPassword; }}
2 控制某些字段的是否可以被序列化
Gson提供了@Expose注解来控制成员变量的序列化和非序列化,这个注解有两个变量:serialize和deserialize,默认都是true。若要使这个注解生效,必须使用GsonBuilder.excludeFieldsWithoutExposeAnnotation()方法来构建Gson对象。
package com.xi.liuliu.testgson;import com.google.gson.annotations.Expose;/** * Created by liuliu on 2017/6/16. */public class Student { @Expose private String name; @Expose(serialize = false) private String age; @Expose(serialize = false, deserialize = false) private String identityCardNumber; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getIdentityCardNumber() { return identityCardNumber; } public void setIdentityCardNumber(String identityCardNumber) { this.identityCardNumber = identityCardNumber; }}
使用:
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();反序列化生成Student时,只有name、age会被赋值;序列化生成Json字符串时,只会包含name字段。
3版本号控制
Gson还提供了@Since注解进行版本控制,使用GsonBuilder构建时指定版本号,高于该版本的字段在序列化和反序列化时都将被忽略。
package com.xi.liuliu.testgson;import com.google.gson.annotations.Since;/** * Created by liuliu on 2017/6/16. */public class Student { @Since(3.1) private String name; @Since(3.1) private String age; @Since(3.0) private String identityCardNumber; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getIdentityCardNumber() { return identityCardNumber; } public void setIdentityCardNumber(String identityCardNumber) { this.identityCardNumber = identityCardNumber; }}使用:
Gson gson = new GsonBuilder().setVersion(3.0).create();name和age字段由于版本号高于Gson对象指定的3.0版本,在转换过程中会被自动忽略,从而控制变量是否序列化。
- Gson的基本用法
- Gson之基本用法
- Gson的基本用法
- Google Gson 基本用法
- Gson基本用法
- Json、Gson的基本用法
- 记录下android json,Gson基本用法
- Gson用法
- GSON基本使用
- Gson基本使用
- GSON基本应用【L】
- Gson工具 基本API
- Gson的简要用法
- Android Gson用法
- Android Gson用法
- gson常用用法小结
- Gson的简单用法
- Gson的用法
- 89C52单片机之串口
- Jenkins邮件通知之Notification插件
- Webstorm快捷键速记(Mac版)
- AS项目运行正常,但查看代码飘红the file size exceeds configured limit.
- SpringMVC + Freemarker 国际化
- Gson基本用法
- 无向图.md
- [leetcode]: 606. Construct String from Binary Tree
- 排名前三的python 开源 IDE
- 分类的树状处理
- jQuery转Vue项目实践总结
- 奇异值分解(Sigular Value Decomposition)
- jstl select <c:if test下拉菜单不能被选中!
- 如何对系统中设置的修改记录增加log日志