Как сделать мой Java JSONArray вложенным и добавить поля? - PullRequest
0 голосов
/ 06 февраля 2019

Извините, возможный вопрос новичка, я пытаюсь изучать Java, участвуя в проекте на работе.На самом деле код Groovy (и мы используем Grails), но предположим, что для этой цели это то же самое.

Я пытаюсь преобразовать ResultSet 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.Я хочу переместить его в подполе (называемое, например, «data»), а затем получить еще пару пар ключ / значение на корневом уровне.Как бы я изменил код, чтобы сделать это, пожалуйста?(Я мог бы передать пару дополнительных значений в качестве параметров)

Спасибо.

Ответы [ 3 ]

0 голосов
/ 06 февраля 2019

Я думаю, что в предоставленном вами фрагменте кода есть ошибка, поскольку ваша подпись указывает 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;
}
0 голосов
/ 06 февраля 2019

Так как это вопрос 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
}
0 голосов
/ 06 февраля 2019

Вы можете сделать что-то вроде

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

Это позволит вам рассматривать ваш JSON как пару ключ-значение и выполнять то, что вы просите.

Кроме того, вы можете захотетьрассмотрим использование ObjectMapper для преобразования вашего объекта в JSON.Это позволит вам создать JSONObject из объекта Java с чем-то вроде objectMapper.writeValueAsString(resultSet)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...