返回只包含指定键值对的json
项目中要用到,从数据库查询到的json中,返回只含指定键值对的json
做法:
- 构造一个实体类,类的属性就是要返回的指定键值对中的键
- 解析json
- 赋值指定键值对给另一个json
- 返回
// 测试用
@RequestMapping(value = "/getreportbrieflist2", method = {RequestMethod.GET,RequestMethod.POST})
public String getreportbrieflist2(HttpServletRequest request) {
// 查询构造的实体类的所有实例数据-----列表形式
List<Reportbrief> reportbrieflist=reportsMapper.getreportbrieflist();
// 遍历每个实例
for (Reportbrief report : reportbrieflist) {
// 拿到数据库中存json的字段
JSONObject jsonObject = JSONObject.fromObject(report.getRsource());
// 开始解析嵌套的json
JSONObject rjson = jsonObject.getJSONObject("rjson");
JSONObject canvasData = JSONObject.fromObject(rjson.getJSONObject("canvasData"));
JSONArray objects = canvasData.getJSONArray("objects");
JSONObject reportjson = JSONObject.fromObject(rjson.getJSONObject("report"));
JSONArray params = reportjson.getJSONArray("params");
// 后期要把一个json中的部分属性赋值给另一个json,先构造一个ArrayList再转成json数组
List jsonArray = new ArrayList(objects.size());
JSONArray jsonArray1 = JSONArray.fromObject(jsonArray);
// 向构造的实体类中赋值,第一层json需要的属性
report.setParams(params);
// 遍历第一层中的某个数组属性的键
for (int i = 0; i < objects.size(); i++) {
// 获取该JSONArray中的每个JSON对象
JSONObject object = objects.getJSONObject(i);
// 创建一个新的JSON对象,用来放需要返回的键值对
JSONObject jsonObject1 = new JSONObject();
jsonObject1.put("rType", object.get("rType"));
jsonObject1.put("isDrillDown", object.get("isDrillDown"));
// 这里的数据只在一开始从数据库中拿数据的时候才需要,如果没有这个属性,那么即使select * 也没法拿到数据,因为从数据库中拿到数据后是壹壹对应,用来构造实体类
report.setRsource(null);
report.setIcobase64(null);
// 根据查询语句数组获取数据数组
String querys[]=object.getString("query").split(";");
JSONArray dataArray=new JSONArray();
Long datasourceid=object.getLong("dataOrigin");
Datasource datasource = datasourceMapper.getDatasourceById(datasourceid);
for(int j=0; j<querys.length; j++){
if(querys[j].length()>0){
String sqlresult = 查询数据结果;
dataArray.add(sqlresult);
}
}
// object.put("data", dataArray);如果这样放,就是把数据放到了原本的json对象中,后面如果jsonArray1.add(object);最后就返回的还是原来的json,会参杂很多冗余属性
// 把数据数组放到指定键下面
jsonObject1.put("data", dataArray);
// 把新构造的json对象,添加到json数组中
jsonArray1.add(jsonObject1);
}
// 把json数组赋值给实体类
report.setObjects(jsonArray1);
}
// 把实体类实例列表转成json
return new Gson().toJson(reportbrieflist);
}