JSONObject的基本使用(fastjson基于实战)

{
  "status": 0,
  "message": "成功",
  "num": 1,
  "mode": "driving",
  "result": [
    {
      "distance": {
        "text": "3.4公里",
        "value": 3434
      },
      "duration": {
        "text": "2分钟",
        "value": 128
      }
    }
  ]
}

先粘一个最近项目中用到的JSON代码,这段代码是调用百度接口时,返回的JSON串,如何更方便的提取JSON串中的内容呢?(*用com.alibaba.fastjson包中的类)

通常我们获取到JSON串都是以String类型存在的,那我们第一步就是先解析JSON串。

//假如resultJson是我们获取到的JSON字符串,通过调用parseObject去解析成JSONObject类型
JSONObject jsonObject = JSONObject.parseObject(resultJson);

如果我们要获取status的值(注意status的结果是什么类型)

//通过getInteger查找status的值
Integer status = jsonObject.getInteger("status");

如果我们要获取message的值

String status = jsonObject.getString("message");

对于result中的值,result是[ ],说明它是一个数组,那么需要先看你需要获取数组中的哪个元素组,

上面提供的JSON串中只存了一个元素组,就是相当于数组中只有一个元素,那么获取result数组中下标为0的元素组,就是以下这串JSON。

    {
      "distance": {
        "text": "3.4公里",
        "value": 3434
      },
      "duration": {
        "text": "2分钟",
        "value": 128
      }
    }

那么代码怎么写呢?

//第一步先通过getJSONArray获取result数组
JSONArray result = jsonObject.getJSONArray("result");
//第二步通过getJSONObject(0)获取到具体的元素组   0代表数组中的下标
JSONObject jsonObject = result.getJSONObject(0);

注意getJSONObject()是JSONArray包中的方法,为什么要提这一点?继续往下看!

为了查找distance中的text和value中的值,需要继续对jsonObject拆解。

//获取distance中的value
int distanceValue = jsonObject.getJSONObject("distance").getIntValue("value");
//获取distance中的text
String distanceText = jsonObject.getJSONObject("distance").getString("text");

此时会发现这里也有getJSONObject()方法,这次调用的是JSONObject中的方法。

也就是说

result.getJSONObject(0);是JSONArray包中的方法,提供数组中也就是[]中元素的具体JSON串。

jsonObject.getJSONObject("distance")是JSONObject包中的方法,提供{}中元素的具体JSON串。

细致的同学可以发现以上代码中有getIntger()和getIntValue()两个方法,那么具体区别是什么呢?

咱们看一下源码

//getInteger()方法
public Integer getInteger(String key) {
        Object value = this.get(key);
        return TypeUtils.castToInt(value);
}

//getIntValue()方法
public int getIntValue(String key) {
        Object value = this.get(key);
        Integer intVal = TypeUtils.castToInt(value);
        return intVal == null ? 0 : intVal;
}

可以看到,两个方法其实返回的都是Integer类型,但是因为int类型遇到null没有自己的解决方法,所以在返回值时多加了一个判断。如果是null就返回0。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值