如何在java中将数据库结果集转换为JSON格式?

如何在java中将数据库结果集转换为JSON格式?,java,json,api,jdbc,automation,Java,Json,Api,Jdbc,Automation,我想将db中的结果集转换为json格式,问题是当结果集以多行的形式返回时,同一个id中有一些重复的数据 DB示例: =========================================================== USER_ID NAME PHONE_NUMBER CITY =========================================================== 1

我想将db中的结果集转换为json格式,问题是当结果集以多行的形式返回时,同一个id中有一些重复的数据

DB示例:

===========================================================
USER_ID         NAME          PHONE_NUMBER         CITY
===========================================================
1               JACK          079999999999        New York
1               JACK          078888888888        Las Vegas
我想让我的json正文看起来像:

{ "USER_ID": 1,"NAME": JACK,"PHONE_NUMBER":[ 079999999999, 078888888888 ], "CITY": [ New York, Las Vegas ]}
这是我的代码:

                Statement stmt = con.createStatement();
                // Execute the SQL Query. Store results in ResultSet
                ResultSet rs = stmt.executeQuery(Query);
                System.err.println("Executing the query please wait ...");
                ResultSetMetaData rsmd=null;
                rsmd=(ResultSetMetaData) rs.getMetaData();
                int columnsCount=rsmd.getColumnCount();


                for (int j = 1; j <= columnsCount; j++) {
                    System.err.print(rsmd.getColumnName(j) + " || ");
                }


            JSONArray jsonArray = new JSONArray();
            while (rs.next()) {
                int total_rows = rs.getMetaData().getColumnCount();
                JSONObject obj = new JSONObject();

                for (int i = 0; i < total_rows; i++) {
                    String columnName = rs.getMetaData().getColumnLabel(i + 1).toLowerCase();
                    Object columnValue = rs.getObject(i + 1);

                    // if value in DB is null, then we set it to default value
                    if (columnValue == null){
                        columnValue = "null";
                    }

                    if (obj.has(columnName)){
                        columnName += "1";
                    }
                    obj.put(columnName, columnValue);

                }
                jsonArray.put(obj);

                System.out.print("\n");
                System.out.print("\n");

                String gsonBody = gson.toJson(jsonArray);

                System.err.println(gsonBody);
            }
            return jsonArray;
语句stmt=con.createStatement(); //执行SQL查询。将结果存储在ResultSet中 ResultSet rs=stmt.executeQuery(查询); System.err.println(“正在执行查询,请稍候…”); ResultSetMetaData rsmd=null; rsmd=(ResultSetMetaData)rs.getMetaData(); int columnsCount=rsmd.getColumnCount();
对于(int j=1;j您使用的是哪种RDBMS?如果Postgres/db2是您的数据库,那么您可以直接将结果集作为JSON返回。

您最好的选择是创建一个自定义类,用一些集合字段(如城市和数字)存储该数据,然后用查询填充它。然后使用现有库将其序列化为JSON.I doubt一般来说,你不需要做很多无意义的工作就可以做到。如果你总是想要JSON格式的,你可以看看使用RDBMS,其实我不在乎RDBMS是什么,编写此代码的目的是使用自动化脚本测试web服务。因此,我想以JSON格式返回db结果。并将此JSON对象与预期的JSON进行比较我想您应该尝试使用并实现自己的处理程序,比如公共类JsonResultSetHandler实现ResultSetHandler{private RowProcessor convert=null;公共JsonResultSetHandler(){this(JsonRowProcessor.ROW_PROCESSOR);}公共JsonResultSetHandler(RowProcessor convert){