友情提示:
此方法利用的是阿里的fastjson,请注意使用前引用
不想直接对字符串进行操作,请前往本文文末连接跳转至利用对象处理;
项目场景
我们熟知前端会大量的处理请求回来的JSON数据。
但是也无可避免的,后端也会直接发送请求给接口,进而出现Java会直接处理josn数据的情况。
处理思路
- 将返回的数据接收到一个string对象中(有时候需要自己选择性的取舍接收)
- 再将string转换为JSONObject对象
- 用get()方法获取对应的值
注:基于第三点的特殊情况,如果返回的json里面出现多组数据的情况(如下图/可能有更复杂的层次),则需要转换为数组(用JSONObject.parseArray()转换)再进行操作—可无限套娃。
参考代码
package com.az;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
public class JsonStr {
public static void main(String[] args) {
//1.比如从前端接收的是这个样子的json字符串,但是我们是不能直接获取到经度 纬度所对应的值的,所以必须要对这个字符串进行解析,
String str = "{\"code\":\"0\"," +
"\"error\":null," +
"\"msg\":\"success\"," +
"\"detail\":[\n" +
" {\"phoneNum\":\"013012401091\",\n" +
" \"lat\":34.431864,\n" +
" \"lon\":109.25992,\n" +
" \"height\":360,\n" +
" \"speed\":33,\n" +
" \"direction\":10,\n" +
" \"gpsTime\":1615420800000,\n" +
" \"gpsDateTime\":1615420800000,\n" +
" \"mileage\":253830800,\n" +
" \"alarms\":[24],\n" +
" \"status\":[1,2,21],\n" +
" \"property\":{}\n" +
" }" +
" ]" +
" }";
//先转换成JSONObject类型
JSONObject jsonObj = JSON.parseObject(str);
//通过JSONObject中的getString("key")方法,得到对应的值 {"code":"0","error":null,"msg":"success"}这种类型
System.out.println("code:"+jsonObj.getString("code"));
//2.字符串中含有数组的,比如像detail中的数据
JSONArray jsonInfo = JSONObject.parseArray(jsonObj.getString("detail"));//将jsonObj解析成json数组
for (int i = 0; i < jsonInfo.size(); i++) {//遍历detail信息
JSONObject jsonDetailInfo = jsonInfo.getJSONObject(i);//根据下标以此拿数据,每一个数据又是一个JSONObject对象,所以用JSONObject接收
String lat = jsonDetailInfo.getString("lat");
String lon = jsonDetailInfo.getString("lon");
String gpsDateTime = jsonDetailInfo.getString("gpsDateTime");
//然后进行其他处理
System.out.println("lat:"+lat+";lon:"+lon+";gpsDateTime:"+gpsDateTime);
}
}
}
若是,使用频率比较多,推荐使用对象的形式处理
利用对象处理传送门.