最近工作做Echarts图表比较多,想一些柱形图、折线图类型的图表,所需的数据一般都是一个数组。我采用的是在后端将数据处理成多个数组,拼接成json字符串返回前端使用。这其中查询出来的是listmap类型的数据,需要转成多个数组,并拼接成json串。如图1,是查询出来的数据。
需要把上图形式的数据改成下面所示的数据。
{"name":["2012","2013","2014","2015","2016"],"xmje":["15.2314","15.2314","15.2314","15.2314","15.2314"],"xms":["36","37","38","39","40"]}
话不多说直接上代码。
/**
*
* 数组类图表数据转换,查询的list转数组组
*
* @作者: zktian
* @创建日期: 2021-7-8 11:35
* @参数: list 查询出的数据
* @参数: map 名称对应 key-json内元素值,value-sql查询时设置的值
* @返回值: JSONObject
*
*/
public static JSONObject LinelistToarays(List<Map<String, Object>> list, Map<String, Object> map){
LinkedHashMap<String, Object> arraysmap = new LinkedHashMap<>();
for (String key:map.keySet()){
String[] a = new String[list.size()];
Arrays.fill(a,"0");
arraysmap.put(key,a);
}
for (int i=0;i<list.size();i++){
Map listmap = list.get(i);
for (String key:map.keySet()){
if (listmap.get(map.get(key))!=null){
String[] s = (String[])arraysmap.get(key);
s[i] = listmap.get(map.get(key)).toString();
arraysmap.put(key,s);
}
}
}
JSONObject jsonObject = new JSONObject(arraysmap);
return jsonObject;
}
在这个方法中需要传两个参数,第一个list是从数据库查询出的数据。第二个参数是一个map,这个参数存在的意义是用来做参数对应。如下表
名称 | 含义 |
---|---|
key | 表示json中的key |
value | 表示sql查询时的别名 |
执行方法时
1.首先根据传入的map批量创建数组并存到另一个map中(arraysmap)。
2.其次遍历list,在list中,遍历map,先将arraysmap中对应的数组取出,根据list的遍历次数给该数组赋值,在将数组放到arraysmap中。
3.arraysmap转json
4.return
下面我们测试一下
@Test
public void run1(){
List<Map<String, Object>> list = new ArrayList<>();
for (int i=0;i<5;i++){
Map<String, Object> map = new HashMap();
map.put("name",2012+i);
map.put("xms",36+i);
map.put("xmje","15.2314");
list.add(map);
}
System.out.println(list);
Map<String, Object> maps = new HashMap<>();
maps.put("name","name");
maps.put("xms","xms");
maps.put("xmje","xmje");
JSONObject jsonObject = LinelistToarays(list,maps);
System.out.println(jsonObject);
}
我们在list中放入一些测试数据,执行方法,运行。
运行结果
list:[{name=2012, xmje=15.2314, xms=36}, {name=2013, xmje=15.2314, xms=37}, {name=2014, xmje=15.2314, xms=38}, {name=2015, xmje=15.2314, xms=39}, {name=2016, xmje=15.2314, xms=40}]
json:{"name":["2012","2013","2014","2015","2016"],"xmje":["15.2314","15.2314","15.2314","15.2314","15.2314"],"xms":["36","37","38","39","40"]}
完美,又省事了。。。