【问题标题】:what is the best way to convert resultset to json [duplicate]将结果集转换为 json 的最佳方法是什么 [重复]
【发布时间】:2015-02-19 23:46:40
【问题描述】:

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

我一直在寻找这个..但没有什么简单的.. 初级过程真的有那么难吗? 还是我的理解有什么问题?

【问题讨论】:

    标签: java json jdbc


    【解决方案1】:

    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();
    }
    

    【讨论】:

    • 发布链接和裸代码,即使正确,也不是一个足够的答案。应包括对为什么链接中的代码和材料充分回答问题的解释。如果没有这些信息,您的答案将被标记为 低质量,这是有的。
    • 感谢您提供此代码 sn-p,它可能会提供一些有限的即时帮助。一个正确的解释would greatly improve 其长期价值,通过展示为什么这是解决问题的好方法,并将使其对未来有其他类似问题的读者更有用。请edit您的回答添加一些解释,包括您所做的假设。
    • 此代码只能处理字符串值。它不会正确处理 JSON 的日期、数字、时间或布尔值。
    【解决方案2】:
    @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 中心获取 JAR,

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

    【讨论】:

      【解决方案3】:

      您可以使用org.json 提供的JSONObject。 将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")));
      

      【讨论】:

        【解决方案4】:

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

        将 pojo 转换为 JSON 的示例:

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

        如果您不将结果转换为 POJO,则可以使用名为 ObjectNodeJsonNode 子类。

        例子:

        public String convert(ResultSet rs) {
            ObjectNode node = new ObjectMapper().createObjectNode();
            node.put("fieldName", rs.getString("columnName"));
            return node.toString(); // this is proper JSON
        }
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-21
          • 2011-10-27
          • 2016-05-29
          • 2012-02-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多