聊一聊Android中的Json解析

说到Json,相信大家都不陌生。Json是一种轻量级的数据交换格式,也是目前开发中最常用的一种数据格式。

那么,我们怎么来解析一个Json串呢?第一步,要先会看一个Json串

在Json中,使用"{  }"包裹的内容代表一个对象,使用"[  ]"包裹的内容代表一个数组。当你知道这一点之后,Json的解析就可以开始了。

光说不练假把式,我在这里放出一个Json串,本文会根据这个Json串进行解析。

{
    "code": 0, 
    "data": {
        "shopId": 1, 
        "faceValue": 4850.23, 
        "payPrice": 4000, 
        "shopNo": ["345678765456","12312234123"] 
    }, 
    "msg": "操作成功"
}

这就是一个非常经典的Json串,包含了对象和数组两种格式。首先先来介绍第一种解析方式,使用JSONObject和JSONArray解析。顾名思义,JSONObject就是用来解析对象的,JSONArray就是用来解析数组的。

首先我们先来看这个串,最外层用"{  }"包裹,即是一个对象,所以我们先用JSONObject来解析第一层,假如我们用个String类型来存储这个Json串,命名为json。

JSONObject jobj = new JSONObject(new String(json));

这样我们就解析了第一层,也就是通过jobj这个对象可以取 "code"、"data"、"msg"这几个参数了。之后我们再往里看,发现"code"是一个int类型的数据,"msg"是一个String类型,"data"则又是一个对象。

所以这里,像"code","msg"这样的参数,是只被jobj这一个对象包裹,所以我们可以直接用jobj对象来取到这两个参数:

int resultCode = jobj.getInt("code");
String msg = jobj.getString("msg");

通过getInt()拿到int类型,通过getString()拿到String类型,以此类推。接下来我们就可以来处理"data"这个对象了,这个对象也是在jobj中,看到了getInt()这样的方法,肯定就会有一种灵光一闪的感觉。

JSONObject jsonObject = jobj.getJSONObject("data");

 这样我们就可以拿到"data'这个对象了,也就是jsonObject。下面也就跟之前的解析一样了,我们只需要从这个对象中取参数就好了。

int shopId = jsonObject.getInt("shopId");
double faceValue = jsonObject.getDouble("faceValue");
int payPrice = jsonObject.getInt("payPrice");

之后也就差一个数组了,其实取的方式和上面的也是大同小异。

JSONArray shopArray = jsonObject.getJSONArray("shopNo");

这样我们就可以取到一个Json数组了,取数组中字段的方法与正常数组也没有差别,我们只需要遍历这个数组进行取值即可。

for(int i=0;i<shopArray.length;i++){
    shopArray.get(i);
}

在这个数组中里面的类型只是简单的String类型,当然在实际开发中,里面也会是一个对象,或者再嵌套一层数组。需要我们层层解析。并且在实际开发中,通常习惯先判断对象中有没有这个字段,这个字段是否为空,然后我们再进行取值。所以比如我要取"shopId"这个字段通常是这样取值:

if(jsonObject.has("shopId")&&!jsonObject.isNull("shopId")){
    int shopId = jsonObject.getInt("shopId");
}

到此使用JSONObject和JSONArray解析的方式就结束了。相信一定有小伙伴发现,我靠,用这种方式解析太麻烦了,每个字段都需要判空,还需要一个字段一个字段的来取,这要是简单的Json还好,这要是嵌套了好几层,有几十个甚至几百个字段,那我的手不得敲折了?

您尚且别急,且由我来给你介绍第二种方法,即使用Gson进行解析。

Gson是谷歌官方推出的支持 Json -- Java Object 相互转换的 Java序列化/反序列化 库,比起上面的解析方式,使用Gson绝对让你觉得简单的想哭!

第一步:导入Gson依赖

dependencies {
    implementation 'com.google.code.gson:gson:2.8.4'
}

第二步:创建一个实体类

这里解释一下,我们使用Gson是需要通过一个实体类来进行解析,也就是我们常说的bean。强烈给大家推荐一个studio插件:GsonFormat,这个插件可以帮助我们一键把Json串转化为bean对象。

安装后,只需要我们创建一个类,然后按Alt+s将Json串复制进去,点击ok即可生成。如下:

这里我创建的实体类名为Shop。

第三步:开始解析 

1.创建一个Gson对象

Gson gson = new Gson();

2.调用方法转化对象

Shop shopBean = gson.fromJson(json,Shop.class);

3.取值

String msg = shopBean.getMsg();

取其他字段或者字段也是以此类推,是不是感觉终极简单呢?当然这两种方式各有利弊,在开发过程中大家可以权衡利弊,择优选择。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值