对不起,可能是新手问题,我正在尝试学习Java,同时为一个项目做出贡献。实际上代码是Groovy(我们正在使用Grails(,但假设为此目的是一样的。
我正在尝试将 JDBC 结果集转换为 JSON(发送到前端(。从博客中获取以下代码:
// Convert JDBC ResultSet to JSON string
public static JSONArray convertToJSON(ResultSet resultSet)
throws Exception {
JSONArray jsonArray = new JSONArray();
ResultSetMetaData metaData = resultSet.getMetaData(); // Result set meta data
int total_columns = metaData.getColumnCount(); // Number of columns in the row
while (resultSet.next()) { // Take each row from the result set
JSONObject obj = new JSONObject();
for (int i = 0; i < total_columns; i++) {
obj.put(metaData.getColumnLabel(i + 1)
.toLowerCase(), resultSet.getObject(i + 1));
}
jsonArray.put(obj);
}
return jsonArray.toString(); // Return as JSON string
}
这(我相信(会给我一个 JSON 结构,数据在 JSON 的根/顶部。我想将其移动到一个子字段(例如称为"数据"(,然后在根级别再有几个键/值对。请问我将如何修改代码来执行此操作?(我可以将几个额外的值作为参数传递(
谢谢。
做类似的事情
JSONObject rootObject = new JsonObject();
rootObject.put("data", jsonArray);
这将让你把你的JSON当作一个键值对,并且应该完成你所要求的。
此外,您可能希望查看使用ObjectMapper
将对象转换为 JSON。这将允许您从 Java 对象创建一个 JSONObject objectMapper.writeValueAsString(resultSet)
类似
我认为您提供的代码片段中存在错误,因为您的签名状态JSONArray
为返回类型,但您返回String
,无论如何这是我的建议:
public static JSONObject convertToJSON(ResultSet resultSet)
throws Exception {
JSONObject root = new JSONObject();
JSONArray jsonArray = new JSONArray();
root.put("data", jsonArray);
ResultSetMetaData metaData = resultSet.getMetaData(); // Result set meta data
int total_columns = metaData.getColumnCount(); // Number of columns in the row
while (resultSet.next()) { // Take each row from the result set
JSONObject obj = new JSONObject();
for (int i = 0; i < total_columns; i++) {
obj.put(metaData.getColumnLabel(i + 1)
.toLowerCase(), resultSet.getObject(i + 1));
}
jsonArray.put(obj);
}
return root;
}
由于这是一个Groovy问题,你可以让你的代码更Groovy;-(
static String convertToJSON(ResultSet resultSet) throws Exception {
def metaData = resultSet.metaData // Result set meta data
def result = []
while (resultSet.next()) { // Take each row from the result set
result << (1..metaData.columnCount).collectEntries {
[metaData.getColumnLabel(it).toLowerCase(), resultSet.getObject(it)]
}
}
return new JsonBuilder(result).toString() // Return as JSON string
}