{
"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。