从数据库获取json组成的某一列并获取json中的值

Postman提交:

{"tableName":"(表名)","field":"(列名)","where":"(查询条件)","DBJson":{"url":"jdbc:(数据库地址)?characterEncoding=UTF-8" ,"username":"","password":""}}

所获取的列的形式:

{"success":"true","detail":{"check":"X50380缺失”,"code":"002","result":[{"notHappenProbability":0.99203277,"rejectionRate":0.6595714,"score":65.957146,"trainDataVersion":"100"}]}}

目的:获取json中的score对应的分值

java代码:

String url= params.get("body").replaceAll("%(?![0-9a-fA-F]{2})", "%25"); 
param = URLDecoder.decode(url, "utf-8").trim();
JSONObject json=JSONObject.fromObject(param);

String dataName = json.getString("tableName");
String where = json.getString("where");
BatchService batchService = (BatchService)MyBeanFactory.getService("batchService");
JSONObject DBJson=json.getJSONObject("DBJson");
String field=json.getString("field");
List<JSONObject> findtPayment = batchService.findtPayment(dataName, where, DBJson);

List<String> ScoreList=new ArrayList<>();

               for(JSONObject jParam:findtPayment){
final JSONObject jsonObject= jParam.getJSONObject(field).has("params")? 
jParam.getJSONObject(field).getJSONObject("params"):jParam.getJSONObject(field);
  
if (jsonObject.getString("success").equals("true")) {
JSONObject detail=jsonObject.getJSONObject("detail");

if (detail.has("result")) {
JSONArray resultArray=detail.getJSONArray("result");
for(int i=0;i<resultArray.size();i++){
JSONObject object=resultArray.getJSONObject(i);
String score=object.getString("score");
ScoreList.add(score);
}
}
  }

}

注意:根据json格式写判断条件,我的json列里面有打分不成功的情况,并且success=true之后还有可能出现打分失败没有result的情况,所以添加了判断条件。

<think>嗯,用户的问题是关于JDBC查询数据库返回的数据是否为JSON格式。首先,我需要明确JDBC的基本工作机制。JDBC是Java用来连接和操作数据库的标准API,它通过驱动程序与不同的数据库进行交互。当执行查询时,JDBC会返回ResultSet对象,里面包含了查询结果的数据。这些数据在Java中通常以基本类型(如String、Integer等)或者对象的形式存在,不是JSON格式。 接下来,用户可能对数据格式转换有需求。例如,他们可能需要将数据库查询结果转换为JSON以便于在Web应用中使用或者与其他系统交互。这时候就需要手动或者使用库(如Jackson、Gson)来将ResultSet转换为JSON。比如,遍历ResultSet的每一行,将每一列提取出来,构建成JSON对象,再组合成JSON数组。 另外,用户提到的参考文章里,引用[1]讲的是将JSON存入数据库,而引用[2]涉及导出JSON文件。这说明用户可能对数据库JSON之间的转换流程感兴趣。需要指出的是,虽然JDBC本身不直接返回JSON,但通过额外的处理步骤可以实现这种转换。比如在查询后处理ResultSet,或者使用第三方库简化转换过程。 可能用户还不太清楚JSON数据库数据结构的区别。JSON是一种轻量级的数据交换格式,而数据库查询结果通常是结构化的表格数据。转换过程中需要注意数据类型匹配,比如日期格式、嵌套对象等可能需要特别处理。此外,性能也是一个考虑因素,尤其是处理大量数据时,需注意内存和效率问题。 最后,用户可能需要具体的代码示例或者最佳实践建议。例如,推荐使用哪些库,如何高效地进行转换,以及常见的问题和解决方案。确保回答覆盖这些方面,帮助用户全面理解整个过程。</think>通过JDBC从数据库查询的数据默认**不是JSON格式**,而是以Java对象形式返回。以下是详细说明和转换方法: ### 一、JDBC查询结果格式解析 1. **原生数据类型** JDBC查询结果通过`ResultSet`对象返回,每数据对应Java基本类型或对象类型(如String、Integer、Date等)[^2]。例如: ```java ResultSet rs = statement.executeQuery("SELECT id, name FROM users"); while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); } ``` 2. **JSON转换需求场景** 当需要与前端交互或构建REST API时,需将ResultSet转换为JSON格式。例如: ```json [ {"id":1, "name":"张三"}, {"id":2, "name":"李四"} ] ``` ### 二、实现JSON转换的方法 #### 方法1:手动构建JSON ```java ResultSet rs = ...; JSONArray jsonArray = new JSONArray(); while (rs.next()) { JSONObject obj = new JSONObject(); obj.put("id", rs.getInt("id")); obj.put("name", rs.getString("name")); jsonArray.add(obj); } ``` #### 方法2:使用Jackson/Gson库 ```java // 使用Jackson库示例 ResultSet rs = ...; ObjectMapper mapper = new ObjectMapper(); ArrayNode arrayNode = mapper.createArrayNode(); ResultSetMetaData metaData = rs.getMetaData(); int columnCount = metaData.getColumnCount(); while (rs.next()) { ObjectNode node = mapper.createObjectNode(); for (int i=1; i<=columnCount; i++) { node.put(metaData.getColumnName(i), rs.getString(i)); } arrayNode.add(node); } String json = mapper.writeValueAsString(arrayNode); ``` ### 三、特殊场景处理建议 1. **日期格式化** 使用`@JsonFormat`注解处理日期类型: ```java @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; ``` 2. **大数据量分页** 通过SQL分页避免内存溢出: ```sql SELECT * FROM table LIMIT 100 OFFSET 200 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值