Android Gson总结
文章目录
- Gson总结
- 依赖库
- 基本API介绍
- 基本用法
- 生成Json字符串
- toJson & fromJson
- 序列化 toJson
- 反序列化操作 fromJson
- Json数组与Java数组相互转换
- Json数组与Java List相互转换
- 泛型支持
- 注解
- @SerializedName 属性重命名
- @Expose 序列化策略
- 过滤
- serializeNulls 输出null
- 格式日期时间
Gson总结
依赖库
implementation 'com.google.code.gson:gson:2.8.6'
基本API介绍
JsonElement有4个子类:
- JsonObject
- JsonArray
- JsonPrimitive
- JsonNullJsonElement常用方法:
isJsonArray()
getAsJsonArray()
isJsonObject()
getAsJsonObject()
isJsonPrimitive()
getAsJsonPrimitive()
isJsonNull()
getAsJsonNull()
基本用法
生成Json字符串
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("name", "小明");
jsonObject.addProperty("age", 18);
jsonObject.addProperty("sex", true);JsonArray jsonArray = new JsonArray();
jsonArray.add("北京市");
jsonArray.add("广州市");
jsonArray.add("上海市");
jsonObject.add("address", jsonArray);System.out.println(jsonObject.toString());
{"name":"小明","age":18,"sex":true,"address":["北京市","广州市","上海市"]}
toJson & fromJson
- 序列化:将Java对象转为Json字符串。
- 反序列化:将Json字符串转为Java对象。
public class User {private String name;private int age;private boolean sex;private String[] address;public User() {}public User(String name, int age, boolean sex, String[] address) {this.name = name;this.age = age;this.sex = sex;this.address = address;}//省略setter/getter toString()
}
序列化 toJson
Gson gson = new Gson();
User user = new User("小白", 18, true, new String[]{"北京市", "上海市", "广州市"});
String json = gson.toJson(user);
System.out.println(json);
{"name":"小白","age":18,"sex":true,"address":["北京市","上海市","广州市"]}
反序列化操作 fromJson
Gson gson = new Gson();
String json = "{\"name\":\"小白\",\"age\":18,\"sex\":true,\"address\":[\"北京市\",\"上海市\",\"广州市\"]}\n";
User user = gson.fromJson(json, User.class);
System.out.println(user);
User{name='小白', age=18, sex=true, address=[北京市, 上海市, 广州市]}
Json数组与Java数组相互转换
String json = "[\n" +"{\"name\":\"小白\",\"age\":18,\"sex\":true,\"address\":[\"北京市\",\"上海市\",\"广州市\"]},\n" +"{\"name\":\"小白2\",\"age\":19,\"sex\":false,\"address\":[\"上海市\",\"广州市\"]},\n" +"{\"name\":\"小白3\",\"age\":120,\"sex\":true,\"address\":[\"北京市\",\"广州市\"]}\n" +"]";Gson gson = new Gson();//Json数组转Java数组
System.out.println("Json字符串转Java数组:");
User[] users = gson.fromJson(json, User[].class);
for (User item : users) {System.out.println(item);
}//Java数组转Json数组
System.out.println("Java数组转Json数组:");
String str = gson.toJson(users);
System.out.println(str);
Json字符串转Java数组:
User{name='小白', age=18, sex=true, address=[北京市, 上海市, 广州市]}
User{name='小白2', age=19, sex=false, address=[上海市, 广州市]}
User{name='小白3', age=120, sex=true, address=[北京市, 广州市]}
Java数组转Json数组:
[{"name":"小白","age":18,"sex":true,"address":["北京市","上海市","广州市"]},{"name":"小白2","age":19,"sex":false,"address":["上海市","广州市"]},{"name":"小白3","age":120,"sex":true,"address":["北京市","广州市"]}]
Json数组与Java List相互转换
String json = "[\n" +"{\"name\":\"小白\",\"age\":18,\"sex\":true,\"address\":[\"北京市\",\"上海市\",\"广州市\"]},\n" +"{\"name\":\"小白2\",\"age\":19,\"sex\":false,\"address\":[\"上海市\",\"广州市\"]},\n" +"{\"name\":\"小白3\",\"age\":120,\"sex\":true,\"address\":[\"北京市\",\"广州市\"]}\n" +"]";Gson gson = new Gson();//Json数组转Java List
System.out.println("Json数组转Java List:");
ArrayList<User> userList = gson.fromJson(json, new TypeToken<List<User>>() {}.getType());
System.out.println(userList);//Java List转Json数组
System.out.println("Java List转Json数组:");
String str = gson.toJson(userList);
System.out.println(str);
Json数组转Java List:
[User{name='小白', age=18, sex=true, address=[北京市, 上海市, 广州市]}, User{name='小白2', age=19, sex=false, address=[上海市, 广州市]}, User{name='小白3', age=120, sex=true, address=[北京市, 广州市]}]
Java List转Json数组:
[{"name":"小白","age":18,"sex":true,"address":["北京市","上海市","广州市"]},{"name":"小白2","age":19,"sex":false,"address":["上海市","广州市"]},{"name":"小白3","age":120,"sex":true,"address":["北京市","广州市"]}]
泛型支持
public class Base<T> {private int code;private String message;private T data;
}
String json = "{\n" +
" \"code\":1,\n" +
" \"message\":\"success\",\n" +
" \"data\":{\n" +
" \"name\":\"小花\",\n" +
" \"age\":\"38\",\n" +
" \"sex\":true\n" +
" }\n" +
"}";
Gson gson = new Gson();
Base<User> userBase = gson.fromJson(json, new TypeToken<Base<User>>() {}.getType());
System.out.println(userBase);
Base{code=1, message='success', data=User{name='小花', age=38, sex=true}}
注解
@SerializedName 属性重命名
public class User {@SerializedName("Name")private String name;@SerializedName("Age")private int age;@SerializedName("Sex")private boolean sex;@SerializedName("Address")private String[] address;
}
Gson gson = new Gson();
String json = "{\"Name\":\"小白\",\"Age\":18,\"Sex\":true,\"Address\":[\"北京市\",\"上海市\",\"广州市\"]}\n";
User user = gson.fromJson(json, User.class);
System.out.println(user);
User{name='小白', age=18, sex=true, address=[北京市, 上海市, 广州市]}
@Expose 序列化策略
@Expose(serialize = true, deserialize = true) //序列化和反序列化都生效
@Expose(serialize = false, deserialize = true) //序列化时不生效,反序列化时生效
@Expose(serialize = true, deserialize = false) //序列化时生效,反序列化时不生效
@Expose(serialize = false, deserialize = false) //序列化和反序列化都不生效,和不写注解一样
过滤
Gson提供excludeFieldsWithModifiers()
方法过滤指定数据
public class User {public String name;int age;protected boolean sex;private String[] address;
}
User user = new User("小白", 18, true, new String[]{"北京市", "上海市", "广州市"});
Gson gson = new GsonBuilder().excludeFieldsWithModifiers(Modifier.PUBLIC, Modifier.PROTECTED).create();
String json = gson.toJson(user);
System.out.println(json);
{"age":18,"address":["北京市","上海市","广州市"]}
serializeNulls 输出null
Gson在进行序列化操作时,如果某个属性值为null,则序列化时不操作该字段,否则使用serializeNulls()
进行配置。
User user = new User(null, 18, true, null);
Gson gson = new Gson();
String json = gson.toJson(user);
System.out.println(json);
{"age":18,"sex":true}
使用serializeNulls()
User user = new User(null, 18, true, null);
Gson gson = new GsonBuilder().serializeNulls().create();
String json = gson.toJson(user);
System.out.println(json);
{"name":null,"age":18,"sex":true,"address":null}
格式日期时间
public class User {private String name;private int age;private Date date;
}
序列化
Gson gson = new GsonBuilder().setPrettyPrinting() //格式化输出json.setDateFormat("yyyy-MM-dd HH:mm:ss") //格式化日期.create();User user = new User("小黑", 18, new Date());
String json = gson.toJson(user);
System.out.println(json);
{"name": "小黑","age": 18,"date": "2021-02-25 17:38:10"
}
反序列化
String json = "{\n" +" \"name\": \"小黑\",\n" +" \"age\": 18,\n" +" \"date\": \"2021-02-25 17:38:10\"\n" +"}";
User user = gson.fromJson(json, User.class);
System.out.println(user);
User{name='小黑', age=18, date=Thu Feb 25 17:38:10 CST 2021}
Android Gson总结相关推荐
- Android Gson在Kotlin data class中的使用
文章目录 Android Gson在Kotlin data class中的使用 基本使用 NEP 空指针异常问题 空指针异常产生的原因 空安全失效问题 字段全有默认值 字段部分有默认值 解决问题 使用 ...
- Android Gson使用详解
Json 是一种文本形式的数据交换格式,比 xml 更为轻量.Json 的解析和生成的方式很多,在 Android 平台上最常用的类库有 Gson 和 FastJson 两种,这里要介绍的是 Gson ...
- Android Gson的使用总结
1.概念 Gson是谷歌发布的一个json解析框架 2.如何获取 github:https://github.com/google/gson android studio使用 compile 'com ...
- android gson工具包,Android Study 之 彻底解决 Gson解析 异常
> LZ-Say:大风呼呼的刮,就好像妖精要来的前奏一样~ > > 前言 开发过程中,App常用的接收参数的时候,几乎大部分都是以json格式为主,那么有关解析json的方式有很多, ...
- Android Gson 操作
JSON序列化后的数据不带类名与名命空间,所以这两个服务端跟客户端可以不对应,需要保证字段对应即可 Asp.net MVC端 using System; using System.Collection ...
- Android—Gson原理解析
JsonElement 抽象类 代表json串的某一个元素 某一个元素: JsonObject JsonArray JsonPrimitive(基本类型) JsonNull JsonElement的四 ...
- Android Gson解析json详解
目前解析json有三种工具:org.json(Java常用的解析),fastjson(阿里巴巴工程师开发的),Gson(Google官网出的),解析速度最快的是Gson,下载地址:https://co ...
- Android Gson深入分析
目前解析json有三种工具:org.json(Java常用的解析),fastjson(阿里巴巴工程师开发的),Gson(Google官网出的),解析速度最快的是Gson,下载地址:https://co ...
- Android Gson类型转换错误解决 com.google.gson.internal.LinkedTreeMap
com.google.gson.internal.LinkedTreeMap不能转换到我的类(com.google.gson.internal.LinkedTreeMap cannot be cast ...
最新文章
- LabVIEW仪表盘识别(实战篇—6)
- PTA数据结构与算法题目集(中文)7-15
- 【SPOJ】Count On A Tree II(树上莫队)
- xx is not in the sudoers file 问题解决
- 在Ubuntu11.10下构建hadoop实验环境笔记
- MySQL5.7.17绿色版安装
- 什么叫开关电源?捏碎了喂给你吃!
- 板邓:wordpress中add_action()和do_action()关系
- java二次方程式答案_二次方程式Java?
- javascript特效:会随着鼠标而动的眼睛
- Pandas读取excel中的数据,并利用现有列数据生成新列
- 醉林疯的PTA 7-2 换硬币 (20分)
- android 系统级闹铃,Android 设置系统闹铃和日历
- 巴西电商Olist数据分析项目:SQL+FineBI
- 36-基于51单片机士壤湿度检测及自动浇花系统
- 硬核干货!全球数字高程数据(DEM)详解,还有地形晕渲、等高线等
- 各种效应:蝴蝶效应、青蛙现象、鳄鱼法则、鲇鱼效应、羊群效应、刺猬法则、手表定律、破窗理论、二八定律、木桶理论、马太效应
- 使用python删除一个文件或文件夹
- 4.15早盘黄金行情平平,白银TD纸白银行情分析
- mysql5.7.19收费》_mysql5.7.19安装
热门文章
- SQL语句ROUND函数(四舍五入,保留小数位)
- word 字体 中英文对照
- 双机热备与负载均衡(双设备)的区别
- 中专学计算机平面设计大专可以转专业吗,我想转专业,请问怎么办呢?
- chrome顶部变黑_win10系统chrome内核浏览器地址栏变黑的解决方法
- java程序员必备软件,最终入职阿里
- Asp.net mvc validaterequest无效的问题
- [iOS]渐变毛玻璃效果
- opssl php rsa_PHP RSA加解密示例(转)
- 数据库操作重点总结记录 ExecuteReader OleDbDataReader...