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

时间:2019-02-06 14:10:59

标签: java json grails jdbc groovy

很抱歉,可能是新手问题,我正在尝试在为工作中的项目做贡献的同时学习Java。实际上,代码是Groovy(&我们正在使用Grails),但假定为此目的是相同的。

我正在尝试将JDBC ResultSet转换为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的根/顶部。我想将其移至子字段(例如“数据”),然后在根级别使用另外一对键/值对。我将如何修改代码来做到这一点? (我可以将几个额外的值作为参数传递)

谢谢。

3 个答案:

答案 0 :(得分:1)

您可以做类似的事情

JSONObject rootObject = new JsonObject();
rootObject.put("data", jsonArray);

这将使您像对待键值对一样对待JSON,并应完成您的要求。

此外,您可能希望使用ObjectMapper将对象转换为JSON。这将允许您使用类似objectMapper.writeValueAsString(resultSet)

的Java对象创建JSONObject。

答案 1 :(得分:1)

我认为您提供的代码段中有错误,因为您的签名将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;
}

答案 2 :(得分:1)

因为这是一个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
}