使用Gson解析json数据 谁借莪1个温暖的怀抱¢ 2022-06-13 13:13 233阅读 0赞 `Gson`是谷歌提供的用来解析`json`的开源库,使用简单方便,`Android`项目中使用,直接将`jar`包放在`libs`文件夹下导入。或者直接在`Dependencies`里添加依赖`Library dependency`里搜索`gson`,后直接添加`google`的gson依赖即可。 # 1.解析单个数据 # 已给`json`数据`"{'name':'jack','age':'18','home_address':'beijing'}"` 先创建Student类。 代码: public class Student { private String name;//不加注解,则默认与json数据的键值对里键名相同 private int age; @SerializedName("home_address")//加注解,则按照注解的字符串来解析json数据中的键名 private String address; //setter and getter ... @Override public String toString() { return "[name=" + name + " age=" + age + " address=" + address + "]"; } } 创建Gson对象 代码: //json字符串 String jsonStu = "{'name':'jack','age':18,'home_address':'beijing'}"; Gson gson = new Gson(); Student student = gson.fromJson(jsonStu, Student.class); System.out.println(student); 结果: [name=jack age=18 address=beijing] ## 1.1.改为泛型兼容 ## 创建`GsonUtil`工具类 代码: public static <T> T gsonFromJson(String jsonStr, Class<T> tClass) { Gson gson = new Gson(); T t = gson.fromJson(jsonStr, tClass); return t; 创建Teacher类: public class Teacher { private String name; private String course; @SerializedName("headteacher") private boolean isHeadTeacher; //setter and getter ... @Override public String toString() { return "[name=" + name + " course=" + course + " isHeadTeacher=" + isHeadTeacher + "]"; } } 测试: String jsonStu = "{'name':'jack','age':18,'home_address':'beijing'}"; String jsonTea = "{'name':'tom','course':'math','headteacher':false}"; Student student = GsonUtil.gsonFromJson(jsonStu, Student.class); Teacher teacher = GsonUtil.gsonFromJson(jsonTea, Teacher.class); System.out.println(student); System.out.println(teacher); 结果: [name=jack age=18 address=beijing] [name=tom course=math isHeadTeacher=false] ## 1.2.含有嵌套的数据 ## 例如json字符串`"{'name':'jack','age':18,'grade':{'math':99,'chinese':88}}"` 单独创建或者内部类创建Grade类即可,仍旧用`gson.fromJson()`解析或者`GsonUtil`工具类解析。 # 2.解析json数组 # 比如给定的json数据: String jsonArray = "[{'course':'math','score':88}," +//注意json数组是有[]括起来的 "{'course':'chinese','score':99}," + "{'course':'english','score':77}]"; 创建类Grade: 代码: public class Grade { private String course; private double score; //setter and getter ... @Override public String toString() { return "[course=" + course + " score=" + score + "]"; } } 解析json数组: 代码: ArrayList<Grade> grades = new ArrayList<>(); grades = new Gson().fromJson(jsonArray, new TypeToken<ArrayList<Grade>>() { }.getType()); for (Grade grade : grades) { System.out.println(grade); } 结果: [course=math score=88.0] [course=chinese score=99.0] [course=english score=77.0] ## 2.1.改为泛型兼容 ## 代码 : public static <T> ArrayList<T> gsonFromJsonArray(String jsonArray, Class<T> tClass) { ArrayList<T> list = new ArrayList<>();//保存结果的list Gson gson = new Gson(); //先解析为JsonObject类型 ArrayList<JsonObject> jsonObjects = gson.fromJson(jsonArray, new TypeToken<ArrayList<JsonObject>>() { }.getType()); for (JsonObject jsonObject : jsonObjects) { //将JsonObject类型换成需要的类型 list.add(gson.fromJson(jsonObject, tClass)); } return list; } # 3.JavaBean转json数据 # 使用`new Gson().toJson()`,参数传入类或列表。 代码: Student student = new Student(); student.setAddress("china"); student.setAge(12); student.setName("jack"); ArrayList<Grade> grades = new ArrayList<>(); grades.add(new Grade("math", 66)); grades.add(new Grade("chinese", 88)); student.setGrade(grades); String jsonStr = new Gson().toJson(student); System.out.println(jsonStr); 结果: {"name":"jack","age":12,"home_address":"china","grade":[{"name":"math","score":66.0},{"name":"chinese","score":88.0}]}
还没有评论,来说两句吧...