How to convert a Java resultset into JSON?

前端 未结 10 2069
清酒与你
清酒与你 2020-11-30 04:58

I have a resultset as a result of a MySQL query using the JDBC connector. So my job is to convert the resultset into a JSON format. So that I can send it to the clientside a

10条回答
  •  无人及你
    2020-11-30 05:45

    I have used Google GSON library, its one tiny gson-2.2.4.jar 190KB library in a mywebapp/WEB-INF/lib folder. http://code.google.com/p/google-gson/

    import com.google.gson.stream.JsonWriter;
    ---
    httpres.setContentType("application/json; charset=UTF-8");
    httpres.setCharacterEncoding("UTF-8");
    JsonWriter writer = new JsonWriter(new OutputStreamWriter(httpres.getOutputStream(), "UTF-8"));
    while(rs.next()) {
       writer.beginObject();
       // loop rs.getResultSetMetadata columns
       for(int idx=1; idx<=rsmd.getColumnCount(); idx++) {
         writer.name(rsmd.getColumnLabel(idx)); // write key:value pairs
         writer.value(rs.getString(idx));
       }
       writer.endObject();
    }
    writer.close();
    httpres.getOutputStream().flush();
    

    If you want typed JSON key:value pairs there is a writer.value(String,long,integer,etc..) setters. Do switch-case within foreach rsmd loop and use appropriate setter for numbered sql types. Default could use writer.value(rs.getString(idx)) setter.

    Using JsonWriter allows writing large json replys CPU+RAM effectively. You dont need to loop sqlresultset first and create massive List in RAM. Then loop list again while writing json document. This example flows as it goes, http reply is being chunked while remaining data is still written to servlet output.

    Its relatively easy to create higher-level wrapper utils around GSON+Sql resultset. jsp page could use SqlIterator(sqlquery) methods (.next(), getColumnCount(), getType(idx), .getString(idx), .getLong(idx) ...) while writing http reply. It loops the original sql without intermediate List. This does not matter for smaller apps but heavy-use apps must consider cpu+ram usage patterns more closely. Or even better do SqlToJson(httpresponse, sqlrs) helper then jsp or servlet code noice is minimal.

提交回复
热议问题