JSONArray hitrateArry = jsonObjectAll.getJSONArray("hitrateOverAll"); List<ScoreHitrateOverall> scoreHitrateOveralls = hitrateArry.toJavaList(ScoreHitrateOverall.class);解释代码
时间: 2024-04-06 18:33:38 浏览: 20
这段代码是将一个名为`jsonObjectAll`的JSON对象中名为`hitrateOverAll`的JSON数组转换为Java对象列表。具体来说,`JSONArray hitrateArry = jsonObjectAll.getJSONArray("hitrateOverAll")`将`hitrateOverAll`数组从`jsonObjectAll`中提取出来,然后`hitrateArry.toJavaList(ScoreHitrateOverall.class)`将该数组转换为Java对象列表,其中Java对象类型为`ScoreHitrateOverall`。最终返回的是一个`List`类型的对象`scoreHitrateOveralls`,其中包含了`hitrateOverAll`数组中的所有元素转换为`ScoreHitrateOverall`对象后的列表。
相关问题
jdk8 使用的com.alibaba.fastjson,优化以下代码 public List<String> getTableColumnEnum(Integer datasourceId, String tableName, String columnName) { String sql = String.format(SQL_TEMPLATE, columnName, tableName, LIMIT); SqlExecuteRequest sqlExecuteRequest = new SqlExecuteRequest(); sqlExecuteRequest.setDataSourceId(datasourceId); sqlExecuteRequest.setSql(Func.encodeBase64(sql)); R<JSONObject> sqlExecuteResult = dolphinSqlClient.sqlExecute(sqlExecuteRequest); if (sqlExecuteResult == null) { throw new ServiceException("查询枚举值失败!"); } if (!sqlExecuteResult.isSuccess()) { throw new ServiceException("查询枚举值失败!"); } List<String> columnValues = new ArrayList<>(); JSONArray results = sqlExecuteResult.getData().getJSONArray("result"); for (int i = 0; i < results.size(); i++) { JSONObject result = results.getJSONObject(i); columnValues.add(result.getString("columnName")); } return columnValues.stream().distinct().collect(Collectors.toList()); }
可以考虑使用 Fastjson 的反序列化功能,将返回的 JSON 数据直接转换为 Java 对象,避免手动解析 JSON 数据的过程。代码如下:
```
public List<String> getTableColumnEnum(Integer datasourceId, String tableName, String columnName) {
String sql = String.format(SQL_TEMPLATE, columnName, tableName, LIMIT);
SqlExecuteRequest sqlExecuteRequest = new SqlExecuteRequest();
sqlExecuteRequest.setDataSourceId(datasourceId);
sqlExecuteRequest.setSql(Func.encodeBase64(sql));
R<JSONObject> sqlExecuteResult = dolphinSqlClient.sqlExecute(sqlExecuteRequest);
if (sqlExecuteResult == null || !sqlExecuteResult.isSuccess()) {
throw new ServiceException("查询枚举值失败!");
}
JSONArray results = sqlExecuteResult.getData().getJSONArray("result");
List<String> columnValues = JSON.parseArray(results.toJSONString(), ColumnValue.class)
.stream().map(ColumnValue::getColumnName).distinct().collect(Collectors.toList());
return columnValues;
}
private static class ColumnValue {
private String columnName;
public String getColumnName() {
return columnName;
}
public void setColumnName(String columnName) {
this.columnName = columnName;
}
}
```
其中,`ColumnValue` 类是一个简单的 POJO 类,用于存储从 JSON 中解析出来的数据。`JSON.parseArray()` 方法将 JSON 数组转换为 `List<ColumnValue>` 对象,然后使用流操作进行去重和转换,得到最终的枚举值列表。
while (!isLastPage) { // 封装请求头 ResponseEntity<String> responseEntity = restTemplate.exchange(StrUtil.format(djUrl, qssj, zzsj, page, limit), HttpMethod.GET, formEntity, String.class); JSONObject response = JSONUtil.parseObj(responseEntity.getBody()); log.info("调用登记信息查询接口返回:{}",responseEntity.getBody()); if (!"200".equals(response.getStr("code"))) { log.info("调用登记信息查询接口返回不是成功:{}_{}", response.get("code"), response.get("msg")); break; } List<BdBdcDj> djList = new ArrayList<>(); List<BdMessage> messageList = new ArrayList<>(); // 解析数据 JSONArray data = response.getJSONArray("data"); data.toList(JSONObject.class).forEach(jsonObject -> { String bsm = jsonObject.getStr("bsm"); // 如果数据库已存在本条记录,则忽略 if (bdBdcDjDao.selectByPrimaryKey(bsm) == null) { // 使用 MapperUtils.map 枚举字段设置有问题,勿改 BdBdcDj bdBdcDj = BeanUtil.mapToBean(jsonObject, BdBdcDj.class, false, null); bdBdcDj.setId(bsm); bdBdcDj.setHouseId(jsonObject.getStr("hbsm")); bdBdcDj.setDivisionCode(jsonObject.getStr("qxdm")); // 如果是转移登记则待处理 if ("C".equals(jsonObject.getStr("djlx"))) { bdBdcDj.setResolveStatus(ResolveStatusEnum.WAITING); // 如果是转移登记则如bdMessage,并推送维资 BdMessage msg = getMessageByDj(bdBdcDj); messageList.add(msg); } else { bdBdcDj.setResolveStatus(ResolveStatusEnum.NO_NEED); } djList.add(bdBdcDj); } });
首先可以将代码分离成不同的方法,提高可读性和可维护性,比如解析数据的部分可以封装成一个方法:
```java
private List<BdBdcDj> parseData(JSONArray data) {
List<BdBdcDj> djList = new ArrayList<>();
data.toList(JSONObject.class).forEach(jsonObject -> {
String bsm = jsonObject.getStr("bsm");
// 如果数据库已存在本条记录,则忽略
if (bdBdcDjDao.selectByPrimaryKey(bsm) == null) {
// 使用 MapperUtils.map 枚举字段设置有问题,勿改
BdBdcDj bdBdcDj = BeanUtil.mapToBean(jsonObject, BdBdcDj.class, false, null);
bdBdcDj.setId(bsm);
bdBdcDj.setHouseId(jsonObject.getStr("hbsm"));
bdBdcDj.setDivisionCode(jsonObject.getStr("qxdm"));
// 如果是转移登记则待处理
if ("C".equals(jsonObject.getStr("djlx"))) {
bdBdcDj.setResolveStatus(ResolveStatusEnum.WAITING);
// 如果是转移登记则如bdMessage,并推送维资
BdMessage msg = getMessageByDj(bdBdcDj);
messageList.add(msg);
} else {
bdBdcDj.setResolveStatus(ResolveStatusEnum.NO_NEED);
}
djList.add(bdBdcDj);
}
});
return djList;
}
```
然后将`while`循环体中的代码进行重构,提高代码可读性,例如:
```java
do {
ResponseEntity<String> responseEntity = restTemplate.exchange(StrUtil.format(djUrl, qssj, zzsj, page, limit), HttpMethod.GET, formEntity, String.class);
JSONObject response = JSONUtil.parseObj(responseEntity.getBody());
log.info("调用登记信息查询接口返回:{}", responseEntity.getBody());
if (!"200".equals(response.getStr("code"))) {
log.info("调用登记信息查询接口返回不是成功:{}_{}", response.get("code"), response.get("msg"));
break;
}
JSONArray data = response.getJSONArray("data");
List<BdBdcDj> djList = parseData(data);
bdBdcDjDao.insertBatch(djList);
page++;
isLastPage = data.size() < limit;
} while (!isLastPage);
```
最后,可以将`BdMessage msg = getMessageByDj(bdBdcDj);`这段代码移到`parseData`方法中,通过返回一个`Map`来返回`djList`和`messageList`。这样可以进一步简化`while`循环体,提高代码可读性和可维护性。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)