因为最近公司业务需求,需要对接摄像头管理平台第三方Api,所以遇到了很多坑,做个笔记记录一下
上面图片是请求第三方接口返回的数据集合,是一个Json格式的 但是是以集合的形式进行。
获取方法
因为虽然是Json但是他包裹的比较深,而且看到他返回的结果跟集合一样,所以按照他一层一层的进行解析,拿到数据。
JSONObject jsonObject = new JSONObject(res.toString());
//获取第一层
JSONObject A1 = jsonObject.getJSONObject("EasyDarwin");
//获取第二层
JSONObject A2 = A1.getJSONObject("Body");
//获取第三层
JSONArray devices = A2.getJSONArray("Channels");
List list = new ArrayList<>();
if (devices.length() > 0) {
for (int i = 0; i < devices.length(); i++) {
JSONObject device = devices.getJSONObject(i);
Map<String, String> map = new HashMap<>();
map.put("ChannelID", device.get("ChannelID").toString()); //通道号
map.put("ChannelType", device.get("ChannelType").toString()); //通道接入类型
map.put("Name", device.get("Name").toString()); //通道名称
map.put("IP", device.get("IP").toString()); //通道IP地址
map.put("Port", device.get("Port").toString()); //通道端口
map.put("GBDeviceID", device.get("GBDeviceID").toString()); //国标设备IP
map.put("GBChannelID", device.get("GBChannelID").toString()); //国标通道id
list.add(map);
}
return new Result(true, StatusCode.OK, "查询成功", list);
第二种返回格式
可以从上面图中可以看到,返回的数据结构又进行了改变,没有像上面一样有很多层~
实现代码如下:
JSONObject jsonObject = new JSONObject(res.toString());
//获取第一层
JSONObject A1 = jsonObject.getJSONObject("EasyDarwin");
//获取第二层
JSONObject devices = A1.getJSONObject("Body");
list = new ArrayList<>();
Map<String, String> map = new HashMap<>();
map.put("ChannelID", devices.get("ChannelID").toString()); //通道ID
map.put("ChannelName", devices.get("ChannelName").toString()); //通道名称
map.put("DeviceID", devices.get("DeviceID").toString()); //设备ID
map.put("DeviceType", devices.get("DeviceType").toString()); //接入协议
map.put("SnapURL", devices.get("SnapURL").toString()); //快照地址
map.put("URL", devices.get("URL").toString()); //直播链接
list.add(map);
}
return new Result(true, StatusCode.OK, "查询成功", list);
}
return new Result(false, StatusCode.GETDATA_OPERATION_FAIL, "查询失败");
这就是我解析返回Json格式的方法,写博客就是为了做笔记,方便自己以后忘记的时候回来查看,巩固知识点~