GSON搞定任何JSON数据

Wesley13
• 阅读 883

Gson介绍:

GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可以将一个Json字符转成一个Java对象,或者将一个Java转化为Json字符串。
特点:
a、快速、高效      
b、代码量少、简洁
c、面向对象
d、数据传递和解析方便

Gson的pom依赖:

 <dependency>    <groupId>com.google.code.gson</groupId>    <artifactId>gson</artifactId>    <version>2.8.0</version> </dependency>

Gson的创建方式:

方式1:Gson gson = new gson();

方式2:通过GsonBuilder(),可以配置多种配置。

Gson gson = new GsonBuilder()                        .setLenient()// json宽松                          .enableComplexMapKeySerialization()//支持Map的key为复杂对象的形式                          .serializeNulls() //智能null                          .setPrettyPrinting()// 调教格式                          .disableHtmlEscaping() //默认是GSON把HTML 转义的                        .create(); 

Gson的基本用法:

之前写过一个获取天气参数的API,就需要去解析返回的json数据,就以此为例。

 String url = "http://t.weather.sojson.com/api/weather/city/101010100"; String resultStr = HttpClientUtil.sendGetRequest(url, "UTF-8");
进行解析
 Gson gson =new Gson(); Map m= gson.fromJson(resultStr,Map.class); System.out.println(m.get("data"));

返回结果(就不格式化了):

{shidu=15%, pm25=15.0, pm10=35.0, quality=优, wendu=3, ganmao=各类人群可自由活动, yesterday={date=06, sunrise=07:36, high=高温 3.0℃, low=低温 -7.0℃, sunset=17:03, aqi=58.0, ymd=2019-01-06, week=星期日, fx=西南风, fl=<3级, type=晴, notice=愿你拥有比阳光明媚的心情}, forecast=[{date=07, sunrise=07:36, high=高温 2.0℃, low=低温 -7.0℃, sunset=17:04, aqi=48.0, ymd=2019-01-07, week=星期一, fx=北风, fl=3-4级, type=多云, notice=阴晴之间,谨防紫外线侵扰}, {date=08, sunrise=07:36, high=高温 1.0℃, low=低温 -9.0℃, sunset=17:05, aqi=28.0, ymd=2019-01-08, week=星期二, fx=北风, fl=3-4级, type=晴, notice=愿你拥有比阳光明媚的心情}, {date=09, sunrise=07:36, high=高温 2.0℃, low=低温 -8.0℃, sunset=17:06, aqi=83.0, ymd=2019-01-09, week=星期三, fx=西南风, fl=<3级, type=多云, notice=阴晴之间,谨防紫外线侵扰}, {date=10, sunrise=07:36, high=高温 4.0℃, low=低温 -7.0℃, sunset=17:07, aqi=128.0, ymd=2019-01-10, week=星期四, fx=西南风, fl=<3级, type=晴, notice=愿你拥有比阳光明媚的心情}, {date=11, sunrise=07:36, high=高温 5.0℃, low=低温 -6.0℃, sunset=17:08, aqi=238.0, ymd=2019-01-11, week=星期五, fx=西南风, fl=<3级, type=多云, notice=阴晴之间,谨防紫外线侵扰}]}
可以新建一个天气的Bean,将返回的json数据转换成对象
//GSON直接解析成对象ResultBean resultBean = new Gson().fromJson(resultStr,ResultBean.class);
解析简单的json
data:{      shidu = 15 % ,       pm25 = 15.0,      pm10 = 35.0,       quality = 优,       wendu = 3,       ganmao = 各类人群可自由活动,     }JsonObject jsonObject =(JsonObject) new JsonParser().parse(resultStr);Int wendu = jsonObject.get("data").getAsJsonObject().get("wendu").getAsInt();String quality= jsonObject.get("data").getAsJsonObject().get("quality").getAsString();
解析多层对象
  data:{      shidu = 15 % ,       pm25 = 15.0,       pm10 = 35.0,       quality = 优,       wendu = 3,       ganmao = 各类人群可自由活动,       yesterday :{                    date = 06,                    sunrise = 07: 36,                    high = 高温 3.0℃,                    low = 低温 - 7.0℃,                    sunset = 17: 03,                    aqi = 58.0,                    ymd = 2019 - 01 - 06,                    week = 星期日,                    fx = 西南风,                    fl = < 3 级,                    type = 晴,                    notice = 愿你拥有比阳光明媚的心情                 }        } JsonObject jsonObject = (JsonObject) new JsonParser().parse(resultStr); JsonObject yesterday = jsonObject.get("data").getAsJsonObject().get("yesterday ").getAsJsonObject(); String type  = yesterday.get("type").getAsString();
解析带数组的json
{shidu = 15 % , pm25 = 15.0, pm10 = 35.0, quality = 优, wendu = 3, ganmao = 各类人群可自由活动, yesterday = {        date = 06,        sunrise = 07: 36,        high = 高温 3.0℃,        low = 低温 - 7.0℃,        sunset = 17: 03,        aqi = 58.0,        ymd = 2019 - 01 - 06,        week = 星期日,        fx = 西南风,        fl = < 3 级,        type = 晴,        notice = 愿你拥有比阳光明媚的心情    }, forecast = [{        date = 07,        sunrise = 07: 36,        high = 高温 2.0℃,        low = 低温 - 7.0℃,        sunset = 17: 04,        aqi = 48.0,        ymd = 2019 - 01 - 07,        week = 星期一,        fx = 北风,        fl = 3 - 4 级,        type = 多云,        notice = 阴晴之间, 谨防紫外线侵扰    }, {        date = 08,        sunrise = 07: 36,        high = 高温 1.0℃,        low = 低温 - 9.0℃,        sunset = 17: 05,        aqi = 28.0,        ymd = 2019 - 01 - 08,        week = 星期二,        fx = 北风,        fl = 3 - 4 级,        type = 晴,        notice = 愿你拥有比阳光明媚的心情    }, {        date = 09,        sunrise = 07: 36,        high = 高温 2.0℃,        low = 低温 - 8.0℃,        sunset = 17: 06,        aqi = 83.0,        ymd = 2019 - 01 - 09,        week = 星期三,        fx = 西南风,        fl = < 3 级,        type = 多云,        notice = 阴晴之间, 谨防紫外线侵扰    }, {        date = 10,        sunrise = 07: 36,        high = 高温 4.0℃,        low = 低温 - 7.0℃,        sunset = 17: 07,        aqi = 128.0,        ymd = 2019 - 01 - 10,        week = 星期四,        fx = 西南风,        fl = < 3 级,        type = 晴,        notice = 愿你拥有比阳光明媚的心情    }, {        date = 11,        sunrise = 07: 36,        high = 高温 5.0℃,        low = 低温 - 6.0℃,        sunset = 17: 08,        aqi = 238.0,        ymd = 2019 - 01 - 11,        week = 星期五,        fx = 西南风,        fl = < 3 级,        type = 多云,        notice = 阴晴之间, 谨防紫外线侵扰    }]}JsonObject jsonObject =(JsonObject) new JsonParser().parse(resultStr);//获取dataJsonObject data = jsonObject.get("data").getAsJsonObject();//获取数组JsonArray forecast = data.getAsJsonObject().get("forecast").getAsJsonArray();String type  = forecast.get(0).getAsJsonObject().get("type").getAsString();

本文分享自微信公众号 - 国产程序员(Monday_lida)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java中常见的json解析方法、库以及性能对比
常见的json解析有原生的JSONObject和JSONArray方法,谷歌的GSON库,阿里的fastjson,还有jackson,jsonlib。Gson(项目地址:https://github.com/google/gson)。Gson是目前功能最全的Json解析神器,Gson当初是为因应Google公司内部需求而由Google自行研发
Karen110 Karen110
3年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Gson自定义处理Calendar日期Date时间类型
Gson是什么?Gson是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可以将一个JSON字符串转成一个Java对象,或者反过来。Gson对一般类型的序列化和反序列话都没有问题,但是像Calendar日期这样的类型,可能需要手动处理下            遇到的问题?时间
Stella981 Stella981
3年前
Gson
Java对象和Json之间的互转,一般用的比较多的两个类库是Jackson和Gson,下面记录一下Gson的学习使用。基础概念: Serialization:序列化,使Java对象到Json字符串的过程。 Deserialization:反序列化,字符串转换成Java对象使用Maven管理Gson,pom.xml导入gson的依赖
Stella981 Stella981
3年前
Gson的学习与使用
Gson介绍:GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可以将一个Json字符转成一个Java对象,或者将一个Java转化为Json字符串。特点:a、快速、高效b、代码量少、简洁c、面向对象d、数据传递和解析方便Gson的pom依赖:<d
Wesley13 Wesley13
3年前
Java操作JSON数据(2)
Gson是Google公司发布的一个开发源码的Java库,可用于将Java对象转换为JSON字符串,也可用于将JSON字符串转换为对应的Java对象。本介绍下Gson的基本使用方法,包括序列化和反序列化;文中所使用到的软件版本:Java1.8.0\_191、Gson2.8.6。1、引入依赖<dependency
Wesley13 Wesley13
3年前
unity将 -u4E00 这种 编码 转汉字 方法
 unity中直接使用 JsonMapper.ToJson(对象),取到的字符串,里面汉字可能是\\u4E00类似这种其实也不用转,服务器会通过类似fastjson发序列化的方式,将json转对象,获取对象的值就是中文但是有时服务器要求将传参中字符串中类似\\u4E00这种转汉字,就需要下面 publ