Gson详解(二)

1.复杂Json转成对象

比如:jsonString:{“response”:{“content”:"\n\t",“msg”:“成功”,“code”:“0”,“data{“content”:”\n\t",“VIN”:“LDC12345678901234”},“cmd”:“ScanVINCode”}}

Gson解析

     Gson gson = new Gson();roodBean = gson.fromJson(jsonString, VinBean.class);if (roodBean != null) {responseBean = roodBean.getResponse();if (responseBean != null) {dataBean = responseBean.getData();if (dataBean != null) {tvReciveData.setText("获取" + responseBean.getMsg() + "\nvin:" + dataBean.getVIN());}}}

VinBean

/*** Description:Vin号的Bean类* AUTHOR: Champion Dragon* created at 2019/7/9**/
public class VinBean {/* json字符串: formatted:{"response": {"content": "\n\t","msg": "成功","code": "0","data":    {"content": "\n\t","VIN": "LDC12345678901234"},"cmd": "ScanVINCode"}}*/private ResponseBean response;public ResponseBean getResponse() {return response;}public void setResponse(ResponseBean response) {this.response = response;}/*** content :* msg : 成功* code : 0* data : {"content":"\n\t","VIN":"LDC12345678901234"}* cmd : ScanVINCode*/public static class ResponseBean {private String content;private String msg;private String code;private DataBean data;private String cmd;public String getContent() {return content;}public void setContent(String content) {this.content = content;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public String getCode() {return code;}public void setCode(String code) {this.code = code;}public DataBean getData() {return data;}public void setData(DataBean data) {this.data = data;}public String getCmd() {return cmd;}public void setCmd(String cmd) {this.cmd = cmd;}/*** content :* VIN : LDC12345678901234*/public static class DataBean {private String content;private String VIN;public String getContent() {return content;}public void setContent(String content) {this.content = content;}public String getVIN() {return VIN;}public void setVIN(String VIN) {this.VIN = VIN;}}}
}

2.json数组转Gson

"muser": [{"name": "zhangsan","age": "10","phone": "11111","email": "11111@11.com"},...]

2.1JsonArray遍历

//Json的解析类对象
JsonParser parser = new JsonParser();
//将JSON的String 转成一个JsonArray对象
JsonArray jsonArray = parser.parse(strByJson).getAsJsonArray();Gson gson = new Gson();
ArrayList userBeanList = new ArrayList<>();//加强for循环遍历JsonArray
for (JsonElement user : jsonArray) {
//使用GSON,直接转成Bean对象
UserBean userBean = gson.fromJson(user, UserBean.class);
userBeanList.add(userBean);

2.2直接转成list对象数组

解析的数组字符串外面多一个大括号 response

{   [{"jylsh": "HZTYQ20180119074","hphm": "浙A5J592","hpzl": "大型汽车","jycs": "1","jyxm": "F1,F4","sqsj": "20180119154701","hpzlcode": "01"},{"jylsh": "HZTYQ20180130054","hphm": "浙A3183","hpzl": "警用汽车","jycs": "2","jyxm": "F4","sqsj": "20180130134051","hpzlcode": "23"},{"jylsh": "20180204151749","hphm": "浙AQ90K3","hpzl": "小型汽车","jycs": "","jyxm": "F4","sqsj": "20180204151749","hpzlcode": "02"}]   }
CarListResponsebean carListResponsebean = GsonUtils.fromJson(response, CarListResponsebean.class);
List<CarListItemBean> data = carListResponsebean.getData();

imgimg

2.3通过Gson中TypeToken转成list对象

解析的数组字符串外面少一个大括号

[{"name":"Tom","age":"10"}, {"name":"Lucy","age":"11"}, {"name":"Lily","age":"11"}]
List<Person> people = gson.fromJson(jsonData, new TypeToken<List<Person>>(){}.getType());

三.GsonUtils工具类

public class GsonUtil {private static final Gson GSON = createGson(true);private static final Gson GSON_NO_NULLS = createGson(false);private GsonUtil() {throw new UnsupportedOperationException("u can't instantiate me...");}/*** 创建Gson对象*/private static Gson createGson(final boolean serializeNulls) {final GsonBuilder builder = new GsonBuilder();if (serializeNulls) {builder.serializeNulls();//是否序列化空值}
//打开Export注解,但打开了这个注解,副作用,要转换和不转换都要加注解(造成json转换失败)一般千万别用builder.excludeFieldsWithoutExposeAnnotation().setDateFormat("yyyy-MM-dd HH:mm:ss")//序列化日期格式  "yyyy-MM-dd"//.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)//会把字段首字母大写
//需要结合注解使用,有的字段在1.0的版本的时候解析,但0.1版本不解析
//              .setVersion(1.0)  .setPrettyPrinting(); //自动格式化换行return builder.create();}//获取gson解析器public static Gson getGson() {return getGson(true);}/*** 是否序列化空值*/public static Gson getGson(final boolean serializeNulls) {return serializeNulls ? GSON_NO_NULLS : GSON;}//对象转换为jsonpublic static String toJson(Object object) {return toJson(object, true);}public static String toJson(final Object object, final boolean includeNulls) {return includeNulls ? GSON.toJson(object) : GSON_NO_NULLS.toJson(object);}//JSON转换为对象1--普通类型public static <T> T fromJson(String json, Class<T> classOfT) {return GSON.fromJson(json, classOfT);}//JSON转换为对象-针对泛型的类型public static <T> T fromJson(String json, Type typeOfT) {return GSON.fromJson(json, typeOfT);}public static <T> T fromJson(final Reader reader, final Class<T> type) {return GSON.fromJson(reader, type);}public static <T> T fromJson(final Reader reader, final Type type) {return GSON.fromJson(reader, type);}/*** @param reader JsonReader(位于Gson包中)  *InputStreamReader inputStreamReader = new InputStreamReader(inputStream);*               JsonReader jsonReader = new JsonReader(inputStreamReader);* @param type   json将要转换的类型* @return T 实例类型**/public static <T> T fromJson(final JsonReader reader, final Type type) {return GSON.fromJson(reader, type);}/*** 转成list,解决泛型在编译期类型被擦除导致报错*/public static <T> List<T> jsonToList(String json, Class<T> cls) {List<T> list = new ArrayList<T>();JsonArray array = new JsonParser().parse(json).getAsJsonArray();for (final JsonElement elem : array) {list.add(GSON.fromJson(elem, cls));}return list;}/*** 转成list中有map的*/public static <T> List<Map<String, T>> GsonToListMaps(String gsonString) {return GSON.fromJson(gsonString, new TypeToken<List<Map<String, T>>>() {}.getType());}/*** 转成map的*/public static <T> Map<String, T> GsonToMaps(String gsonString) {return GSON.fromJson(gsonString, new TypeToken<Map<String, T>>() {}.getType());}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/556914.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux mysql 备份脚本_linux 之mysql备份脚本

#date 2020.2.20#author zhang#描述 用户自己选择使用什么工具进行备份#$1 账户; $2 密码 $3 地址stty erase "^H"[ -f /etc/init.d/functions ] && . /etc/init.d/functions#备份文件夹路径backup_path"/usr/local/src/backup_mysql"[ -d $backup…

Java使用GSON对JSON进行解析——IDEA引入jar包方式

GSON GSON是Google公司开发的用于解析json的类库。可以很轻松地让程序员将java对象转换成JSON格式&#xff0c;或者将JSON格式的对象转换成Java对象。 使用方法很简单&#xff1a; 首先&#xff0c;需要将GSON类库的jar包引入到自己的IDE中&#xff0c;本教程使用IDEA为例子…

mysql查询姓王的信息代码_MySQL查询语句练习题

1.创建student和score表CREATE TABLE student (id INT(10) NOT NULL UNIQUE PRIMARY KEY ,name VARCHAR(20) NOT NULL ,sex VARCHAR(4) ,birth YEAR,department VARCHAR(20) ,address VARCHAR(50));创建score表。SQL代码如下&#xff1a;CREATE TABLE score (i…

IoT -- (四) 物联网系统架构介绍

物联网系统框架介绍 下面将谈到几个关键问题&#xff1a; 设备如何接入网络&#xff1f;设备间如何通信&#xff1f;物联网数据的用途?如何搭建起一个物联网系统框架呢&#xff1f;它的技术架构又是怎么样呢&#xff1f;物联网终端软件系统架构&#xff1f;物联网云平台系统…

mysql 删除not null_从MySQL的列中删除NOT NULL限制?

要从MySQL的列中删除NOT NULL限制&#xff0c;请使用ALTER命令。语法如下&#xff1a;ALTER TABLE yourTableName MODIFY COLUMN yourColumnName dataType;为了理解上述语法&#xff0c;让我们创建一个表。创建表的查询如下&#xff1a;mysql> create table NotNullDemo->…

IoT -- (五) IoT都有哪些通信协议

IOT都有哪些通信协议&#xff1f; 在物联网协议中&#xff0c;我们一般分为两大类&#xff0c;一类是传输协议&#xff0c;一类是通信协议。那么&#xff0c;物联网都有哪些通信协议呢? 在物联网协议中&#xff0c;我们一般分为两大类&#xff0c;一类是传输协议&#xff0c…

IoT -- (六) MQTT和CoAP对比分析

IoT物联网需要标准协议&#xff0c;针对小设备最有前景的两种是MQTT和CoAP。 MQTT和CoAP两者均&#xff1a; 开放标准&#xff1b; 比HTTP更适合于受限环境&#xff1b; 提供异步传输机制&#xff1b; 在IP上运行&#xff1b; 有很多种实现 MQTT在传输模式上更为灵活&am…

mysql5.7.19不好用_Mysql 5.7.19 免安装版遇到的坑(收藏)

1、从官网下载64位zip文件。2、把zip解压到一个位置&#xff0c;此位置为安装为安装位置3、如果有以前的mysql 如果是install的&#xff0c;去控制面板卸载&#xff0c;还需要删除以前mysql留下来的残留文件。如果是免安装的&#xff0c;用mysqld -remove命令删除 &#xff0c;…

IoT -- (八)MQTT优缺点

物联网并不仅仅是一种网络&#xff0c;而是一个新的生态环境&#xff0c;它描述的本质是越来越多的使用物品通过网络连接在一起并可使用单个或者多个的终端设备对它们进行各种控制和使用—当然&#xff0c;工业上的物联网通常连接到的石鼓传感器或者其他数据采集仪器以及行为单…

mysql 平滑扩容_数据库秒级平滑扩容架构方案

一、缘起(1)并发量大&#xff0c;流量大的互联网架构&#xff0c;一般来说&#xff0c;数据库上层都有一个服务层&#xff0c;服务层记录了“业务库名”与“数据库实例”的映射关系&#xff0c;通过数据库连接池向数据库路由sql语句以执行&#xff1a;如上图&#xff1a;服务层…

IoT -- (九) IoT通讯技术选型与模型设计

IoT时代的无线通讯技术 “世界上最遥远的距离就是没有网络”&#xff0c;网络通讯是IoT的基础&#xff0c;常见的无线网络通讯技术有&#xff1a;WiFi、NFC、ZigBee、Bluetooth、WWAN&#xff08;Wireless Wide Area Network&#xff0c;包括GPRS、3G、4G、5G等&#xff09;、…

SSM中PageHelper的使用步骤与com.github.pagehelper.PageHelper3系列与5系列的区别

SSM中PageHelper的使用步骤 一. 在pom.xml导入依赖 <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.2</version></dependency>二. 交给IOC管理 在SqlSessionFactory…

mysql修改数据库级别_设置数据库兼容级别的两种方法

兼容级别设置为 80 兼容级别设置为 90 影响的可能性对于 FROM 子句中的锁提示&#xff0c;WITH 关键字始终是可选的。但在一些例外情况中&#xff0c;仅当用 WITH 关键字指定表提示时&#xff0c;FROM 子句中才支持这些提示。有关详细信息&#xff0c;请参阅 FROM (Transact-SQ…

Github PageHelper 原理解析

任何服务对数据库的日常操作&#xff0c;都离不开增删改查。如果一次查询的纪录很多&#xff0c;那我们必须采用分页的方式。对于一个Springboot项目&#xff0c;访问和查询MySQL数据库&#xff0c;持久化框架可以使用MyBatis&#xff0c;分页工具可以使用github的 PageHelper。…

Springboot Mybatis使用PageHelper实现分页查询

以下介绍实战中数据库框架使用的是mybatis&#xff0c;对整合mybatis此处不做介绍。 使用pageHelper实现分页查询其实非常简单&#xff0c;共两步&#xff1a; 一、导入依赖&#xff1b; pom.xml添加依赖&#xff1a; <!--分页插件 pagehelper --> <dependency>…

mysql 与 xls 连接_数据库MySQL与xls文件的互导

最近的一个项目需要将xls表导入到MySQL数据库中和将MySQL数据表导出到xls表中&#xff0c;在网上搜了很多资料&#xff0c;经过多次尝试终于实现了功能&#xff0c;废话不多说&#xff0c;在这粘贴出代码&#xff0c;希望可以帮到需要的朋友。一、将.xls表导入到MySQL数据表中。…

Mysql 一条SQL语句实现批量更新数据,update结合case、when和then的使用案例

如何用一条sql语句实现批量更新&#xff1f;mysql并没有提供直接的方法来实现批量更新&#xff0c;但是可以用点小技巧来实现。 代码如下: UPDATE mytable SET myfield CASE id WHEN 1 THEN valueWHEN 2 THEN valueWHEN 3 THEN value END WHERE id IN (1,2,3);这里使用了c…

MySQL可运行在不同的操作系统下_不同操作系统下的mysql数据库同步

当数据库的数据量读写频繁的时候&#xff0c;我们就要考虑把数据库的读写分开&#xff0c;以提高数据库的使用效率&#xff0c;(当然还有其他用处比如&#xff0c;备份数据)&#xff0c;这个时候我们就要用到mysql的一个功能&#xff0c;数据库同步。下面就具体讲一下实现方法。…

@RequestBody和@RequestParam区别

一&#xff1a;RequestBody和RequestParam区别 RequestParam 用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容。&#xff08;Http协议中&#xff0c;如果不指定Content-Type&#xff0c;则默认传递的参数就是application/x-www-form-urlencoded类型&am…

mysql内置加密函数_MySQL数据库内置加密函数总结

首先&#xff0c;我认识的加密函数有以下几个&#xff1a;password(plainText)&#xff1a;旧版(OLD_PASSWORD())加密后长度16位&#xff0c;新版41位select length(password("123456"))可以用来查看加密后的字符串的长度。这种加密方法依赖数据库&#xff0c;需要保…