提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
前端时间写了一个springboot项目,从mongodb取数据生成月报的一些子图片表格啥的到word的小项目。其中用到从mongodb中取出一个可能会缺少key的Array数据类型的数据,生成一个自定义类的列表。
一、mongodb部分
1、mongodb数据类型
这里的这个key有的没有time,有的没有elapsedTime,有的没有其他的
2、springboot连接mongodb
我是使用的MongoTemplate进行mongodb操作的,这里说明一下Criteria拼接sql语句的,查询条件每个人都不一样应该主要是mongoTemplate调用的方法中间的自定义类首先要用ArrayList类型接收
这个比较重要
@Autowired
MongoTemplate mongoTemplate;
public Bread test(String errorId, String projectId){
Criteria criteria = Criteria.where("errorId").is(new ObjectId((String) errorId))
.andOperator(Criteria.where("projectId").is(new ObjectId((String) projectId)));
Query query = new Query(criteria);
Bread event = mongoTemplate.findOne(query, Bread.class, "javascriptevents");
return event;
}
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Bread {
private String id;
private ArrayList<BreadcrumbArr> breadcrumbs;
}
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BreadcrumbArr {
private String type;
private String elapsedTime;
private String time;
private String detail;
private String page;
}
二、对接收到的数据进行处理
在pom中引入org.json依赖,我的依赖。版本我是照着官网最新版来的
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20220320</version>
</dependency>
JSONObjec构造方法里面传入一个json类型的字符串对象
其中的MyJSONObject是关键,Array没有中可能没有其中的一个key,但是其他的有的我要留着
这里要说一下JSONObject.get(“key”)方法如果这个key找不到。这个方法会报错。且程序停止,我不想让他停止。
import org.json.JSONObject;
@GetMapping("tranBreadCrumbs")
public List<Breadcrumb> tranBreadCrumbs(String errorId,String projectId) throws ParseException {
Bread test = errorService.test(errorId, projectId);
//对数组进行排序,因为我的项目有需求是按照时间排序,取出前5条
//你们对service传过来的list操作时,最好也新建一个ArrayList赋值过来。以前吃过亏。
List<BreadcrumbArr> listB = new ArrayList<>();
listB.addAll(test.getBreadcrumbs());
Collections.reverse(listB);
List<Breadcrumb> list = new ArrayList<>();
if (listB!=null){
int id = 1;
for (BreadcrumbArr breadcrumb : listB) {
//这里传入的是json类型的字符串对象,
JSONObject jsonObject = new JSONObject(breadcrumb);
//这一步是因为我的数据其实是不固定的,有些键是没有的,但是只要有的键我就留着。
//所以这里我的解决办法就是新建一个MyJSONObject类对其进行包裹
MyJSONObject myJSONObject = new MyJSONObject(jsonObject);
Breadcrumb breadcrumb0=new Breadcrumb();
breadcrumb0.setId(id);
breadcrumb0.setType(myJSONObject.get("type"));
breadcrumb0.setElapsedTime(myJSONObject.get("elapsedTime"));
breadcrumb0.setTime(myJSONObject.get("time"));
breadcrumb0.setDetail(myJSONObject.get("detail").replaceAll("\\{|\\}",""));
breadcrumb0.setPage(myJSONObject.get("page").replaceAll("\\{|\\}",""));
list.add(breadcrumb0);
id++;
}
}
List<Breadcrumb> list1 = new ArrayList<>();
if (list.size()>5){
list1 = list.subList(0,5);
return list1;
}else {
return list;
}
}
MyJSONObject类
public class MyJSONObject {
private JSONObject myJSONObject;
public String get(String key){
try {
return (String) myJSONObject.get(key);
}catch (RuntimeException e){
e.printStackTrace();
return "";
}
}
}
总结
这是第一次写博客,可能会有许多地方写的不好的,写的不对的地方,还请大神一一指点。多多留言交流。