专栏首页国产程序员GSON搞定任何JSON数据

GSON搞定任何JSON数据

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);
//获取data
JsonObject data = jsonObject.get("data").getAsJsonObject();
//获取数组
JsonArray forecast = data.getAsJsonObject().get("forecast").getAsJsonArray();
String type  = forecast.get(0).getAsJsonObject().get("type").getAsString();

本文分享自微信公众号 - 国产程序员(Monday_lida),作者:看似无限透明的你

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-01-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 数据库主键和外键

    聚集索引,在索引页里直接存放数据,而非聚集索引在索引页里存放的是索引,这些索引指向专门的数据页的数据。

    一觉睡到小时候
  • MySql中InnoDB表为什么要建议用自增列做主键

    如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚集索引、如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯一索...

    一觉睡到小时候
  • ArrayList和LinkedList分别实现堆栈和队列对比

    队列(Queue)是限定所有的插入只能在表的一端进行,而所有的删除都在表的另一端进行的线性表。 表中允许插入的一端称为队尾(Rear),允许删除的一端称为队头...

    一觉睡到小时候
  • Elasticsearch SQL介绍及实例

    Elasticsearch 是一个全文搜索引擎,具有您期望的所有优点,例如相关性评分,词干,同义词等。而且,由于它是具有水平可扩展的分布式文档存储,因此它可以处...

    zhisheng
  • 13、Java菜单条、菜单、菜单项

    13、Java菜单条、菜单、菜单项 一般用Java做界面时,都得牵涉到菜单条、菜单、菜单项的设计。菜单项放在菜单里,菜单放在菜单条里,且其字体均可设置。 13...

    YGingko
  • 案例丨索龄商铺利用小程序拓客引流,月销售额突破10W+

    随着小程序生态的崛起,围绕着用户衣食住行的小程序电商出现了井喷之势,也让更多的传统电商纷纷有了进军小程序的决心。“索龄商铺”正是其中的一员。

    极客小程序分享
  • 小程序线上线下打通增强体验和效率 新零售业该如何把握机会?

    自小程序2017年1月9号正式上线以来,不论是中小商家,还是各大品牌巨头,都在抢占小程序这波风口,打造属于自己的小程序。截至目前,全国正式上线小程序超过100万...

    速成应用小程序开发平台
  • 3分钟速读原著《高性能MySQL》(一)

    cwl_java
  • 微信小程序开发:集成微信支付功能

    说到微信小程序开发,是真的气不打一处来,微信开发文档真的很坑爹,需要蒙、猜,尤其是对于微信开发的刚入行的同行来说,真的是有点难度,而且踩坑不断,连环坑层出不穷,...

    三掌柜
  • 小程序 · 一周报

    有读者发现,微信近日悄然上线了小游戏设计指南。微信基于小游戏轻便快捷、便于传播的特点拟定了小游戏界面设计指南和建议,旨在帮助小游戏开发者创造更优秀的游戏产品,同...

    极乐君

扫码关注云+社区

领取腾讯云代金券