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,一经查实,立即删除!

相关文章

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;物联网云平台系统…

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…

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…

@requestbody和@requestparam作用

1、什么都不写 GET 可以自动封装为对象模型&#xff0c;没有的数值自动为0值 POST 请求体里面放了数据&#xff0c;但是还是使用了RequestParam里的数据 总结&#xff1a; 在不使用注解的情况下&#xff0c;相当于默认使用了RequestParam里的数据 &#xff08;这种理解是错…

@RequestBody的使用

提示&#xff1a;建议一定要看后面的RequestBody的核心逻辑源码以及六个重要结论本文前半部分的内容都是一些基 本知识常识&#xff0c;可选择性跳过。 声明&#xff1a;本文是基于SpringBoot&#xff0c;进行的演示说明。 基础知识介绍&#xff1a; ​ RequestBody主要用来接…

@RequestBody 和 @RequestParam可以同时使用

RequestParam和RequestBody这两个注解是可以同时使用的。 网上有很多博客说RequestParam 和RequestBody不能同时使用&#xff0c;这是错误的。根据HTTP协议&#xff0c;并没有说post请求不能带URL参数&#xff0c;经验证往一个带有参数的URL发送post请求也是可以成功的。只不过…

mysql索引使增删变慢_mysql优化之索引篇

mysql&#xff0c;对it打工人&#xff0c;这个几乎是必备的技能之一。mysql可以解决我们平时工作中的大量的、有关增删查改的问题。所以想深入了解mysql&#xff0c;我觉得关键在于他的增删查改背后的算法&#xff0c;开搞。面对增删查改等问题&#xff0c;直接通过场景来看吧场…

POST、GET、@RequestBody和@RequestParam区别

RequestParam 注解RequestParam接收的参数是来自HTTP请求体或请求url的QueryString中。 RequestParam可以接受简单类型的属性&#xff0c;也可以接受对象类型。 RequestParam有三个配置参数&#xff1a; required 表示是否必须&#xff0c;默认为 true&#xff0c;必须。de…

centos安装mysql卡住_CentOS 6.4安装MySQL的过程中出现的bug

在CentOS 6.4下安装MySQL&#xff0c;下载一个源码包&#xff0c;感觉很简单&#xff0c;tar&#xff0c;./configure&#xff0c;make&#xff0c;make install 经典四步&#xff0c;弄这个也不是第一次了&#xff0c;但今天就是老出错&#xff0c;首先是./configure中&#x…

SpringMVC接受List的几种方式

说到SpringMVC接受List参数&#xff0c;可能有人会说这个是个坑&#xff01;下面我来跟大家说怎么补这个坑。下面我分几种情况来讲&#xff1a; 一、只接收一个List 1、form表单提交 controller代码&#xff1a; ResponseBody RequestMapping("test") public voi…

mysql怎么加固_mysql安装及加固

mysql安装查看是否安装mysql我们先看一下有没有安装mysqlyum list installed mysql | grep mysql本地只安装了php链接mysql的库&#xff0c;没有安装mysql如果有安装&#xff0c;可以使用安装的或者卸载了重新安装添加yum源去mysql官网查找下面我就来安装下yum源sudo rpm -ivh …

RabbitMQ保姆级教程

文章目录 前言一、MQ是什么&#xff1f; 1.1 AMQP 二、在Linux安装RabbitMQ 2.1 安装2.2 RabbitMQ启动命令2.3 开启RabbitMQ 后台管理界面 2.3.1 登录rabbitMQ UI界面 2.3 Docker启动RabbitMQ2.4 常见消息模型2.5 生产者(Producer) / 消费者(Consumer)2.6 工作队列模式(Work Q…

spring mysql 连接池配置_SpringBoot数据库连接池常用配置

关注公众号&#xff1a;程序猿王国 持续更新&#xff0c;每日分享在配置文件中添加配置如下(我使用的是多数据源)&#xff1a;spring.datasource.primary.urljdbc\:mysql\://localhost\:3306/test?useUnicode\true&characterEncoding\utf-8spring.datasource.prim…

交换机到底是啥?

1、交换机 交换机个人资料&#xff1a; 1.证件照 注&#xff1a;copy 百度百科 我的博客/交换机到底是啥&#xff1f; 这东西乍一看有点像月光宝盒&#xff0c;是不是。 2.个人简介 交换机&#xff08;Switch&#xff09;意为“开关”是一种用于电&#xff08;光&#xff0…