将结果集转换为json的最佳方法是什么?

时间:2014-12-21 19:54:38

标签: java json jdbc

我从Resultset服务器获取mySQL,并希望将其作为JSON发送回客户端。 服务器在Java EE ..

中写入

我一直在寻找这个......但没什么简单的.. 那个基本过程真的必须那么难吗? 或者我的理解有什么不对吗?

5 个答案:

答案 0 :(得分:3)

使用Jackson进行JSON处理。如果您将结果转换为POJO,只需使POJO Jackson兼容(例如,getters将自动序列化或使用@JsonProperty

将pojo转换为JSON的示例:

ObjectMapper mapper = new ObjectMapper();
mapper.writeValueAsString(somePojo);

如果您不将结果转换为POJO,则可以使用名为JsonNode的{​​{1}}子类。

示例:

ObjectNode

然而,最常见和最简洁的方法是从您的函数返回POJO(无论是EJB还是REST服务或类似),然后让框架将它转换为JSON(通常框架使用Jackson) 。这意味着您的方法只返回某种 Jackson兼容的模型对象。

答案 1 :(得分:2)

https://gist.github.com/mreynolds/603526

public String convertResultSetToJson(ResultSet resultSet) throws SQLException {
    Joiner commaJoiner = Joiner.on(", \n");

    StringBuilder builder = new StringBuilder();
    builder.append("{ \"results\": [ ");

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

    while (resultSet.next()) {
        List<String> resultBits = new ArrayList<String>();

        ResultSetMetaData metaData = resultSet.getMetaData();
        for (int i = 1; i <= metaData.getColumnCount(); i++) {
            StringBuilder resultBit = new StringBuilder();
            String columnName = metaData.getColumnName(i);
            resultBit.append("\"").append(columnName).append("\": \"").append(resultSet.getString(i)).append("\"");
            resultBits.add(resultBit.toString());
        }

        results.add(" { " + commaJoiner.join(resultBits) + " } ");
    }

    builder.append(commaJoiner.join(results));
    builder.append("] }");
    return builder.toString();
}

答案 2 :(得分:0)

您可以使用JSONObject提供的org.json。 将org.json.JSONObject导入您的文件。然后您可以按如下方式转换结果集:

jsonObject = new JSONObject();
jsonObject.put(key,resultSet.getInt(resultSet.findColumn(columname)));
return jsonObject.toString();

因此,如果您想将名为NO_OF_DAYS且值为3的列返回到json对象(例如此{"days" : "3"})中,则将代码编写为:

jsonObject.put("days",resultSet.getInt(resultSet.findColumn("NO_OF_DAYS")));

答案 3 :(得分:0)

@SuppressWarnings("unchecked")      //we use 3rd-party non-type-safe types...
public static String convertResultSetToJson(ResultSet resultSet) throws SQLException
{
    JSONArray json = new JSONArray();
    ResultSetMetaData metadata = resultSet.getMetaData();
    int numColumns = metadata.getColumnCount();

    while(resultSet.next())             //iterate rows
    {
        JSONObject obj = new JSONObject();      //extends HashMap
        for (int i = 1; i <= numColumns; ++i)           //iterate columns
        {
            String column_name = metadata.getColumnName(i);
            obj.put(column_name, resultSet.getObject(column_name));
        }
        json.add(obj);
    }
    return json.toJSONString();
}

来源:https://github.com/OhadR/ohadr.common/blob/master/src/main/java/com/ohadr/common/utils/JsonUtils.java

你可以轻松使用:JsonUtils.convertResultSetToJson(...)

从Maven Central抓住JAR,

<!-- https://mvnrepository.com/artifact/com.ohadr/ohadr.commons -->
<dependency>
    <groupId>com.ohadr</groupId>
    <artifactId>ohadr.commons</artifactId>
    <version>0.3</version>
</dependency>

答案 4 :(得分:0)

我建议将以下问题用作解决您的问题的方法 Most efficient conversion of ResultSet to JSON?

简单,可采用,并且对org.json和java.sql以外的库没有依赖性。