如何使我的Java JSONArray嵌套并添加字段



对不起,可能是新手问题,我正在尝试学习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
}

最新更新