二维数组参数传递总结
最近做一个项目的后端开发,由于项目涉及到经纬度的存储,所以前端会传给我各种一维数组和二维数组构成的数据。
存储的时候我是将他转换成字符串进行存储的。
接触到的第一个知识点:数组转换成字符串。
route.setStartPoint(Arrays.toString(startPoint)); //一维数组转字符串
route.setEndPoint(Arrays.toString(endPoint));
route.setPathway(Arrays.deepToString(pathway)); //二维数组转字符串
由于项目中用到了com.alibaba.fastjson,所以我第一次其实用的是JSON.toJSONString()这个方法转换的,结果到数据库一看,数据是这样的,每个元素都分别加了双引号。
改成Arrays的转换方法后,得到了我想要的储存效果:
第二个知识点:数组格式的字符串取出来后如何以数组形式返回给前端
如果以默认的方式,直接返回给前端。它并不是数组的格式,如下图,是用Postman测试返回的数据:
解决办法
我在相应的实体类中声明了一个JSONArray类型的数据
private String pathway;
private JSONArray pathwayArr;
在查询的时候,将pathway作了进一步数据处理,并赋值给pathwayArr。
以这种格式返回给前端,成功解决了问题。
二维数组判断内容是否相等
private boolean equal(final String[][] arr1, final String[][] arr2) {
if (arr1 == null) {
return (arr2 == null);
}
if (arr2 == null) {
return false;
}
if (arr1.length != arr2.length) {
return false;
}
for (int i = 0; i < arr1.length; i++) {
if (!Arrays.equals(arr1[i], arr2[i])) {
return false;
}
}
return true;
}
二维数组转换成字符串后如何转换回二维数组
JSONArray jsonArray = JSON.parseArray(routeResult.getPathway());
// 声明一个空的二维数组,一定要为其声明总长度及子数组长度,要不然赋值的时候会报错
String[][] arr = new String[jsonArray.size()][2];
for(int i=0;i<jsonArray.size();i++){
JSONArray arr = JSON.parseArray(JSON.toJSONString(jsonArray.get(i)));
arr[i][0] = JSON.toJSONString(arr.get(0));
arr[i][1] = JSON.toJSONString(arr.get(1));
}
log.info("转换后的二维数组{}",arr);