Javaservlet中Json的结果集

Javaservlet中Json的结果集,java,json,servlets,Java,Json,Servlets,尝试从数据库获取数据并存储在JSON对象中,如下所示: try { JsonObject jsonResponse = new JsonObject(); JsonArray data = new JsonArray(); JsonArray row = new JsonArray(); PrintWriter out = response.getWriter(); Conn

尝试从数据库获取数据并存储在JSON对象中,如下所示:

try {
            JsonObject jsonResponse = new JsonObject();
            JsonArray data = new JsonArray();
            JsonArray row = new JsonArray();
            PrintWriter out = response.getWriter();

            Connection con = OracleDBConnection.getConnection();
            String query = "Select * from CUSTOMER_DEMOGRAPHICS";
            Statement st = con.createStatement();
            ResultSet rSet = st.executeQuery(query);

            while (rSet.next()) 
            {
                row.add(new JsonPrimitive(rSet.getString("COUNTRY")));
                row.add(new JsonPrimitive(rSet.getString("STATE")));
                row.add(new JsonPrimitive(rSet.getString("CITY")));
                data.add(row);
            }

            jsonResponse.add("ResponseData", data);
            response.setContentType("application/json");
            response.setCharacterEncoding("UTF-8");

            out.print(jsonResponse);
            out.flush();
            System.out.println(jsonResponse);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
数据库中的表结构:

COUNTRY     STATE       CITY
================================
AUSTRALIA   VICTORIA    MELBOURNE
AUSTRALIA   NEW SOUTH   SYDNEY
问题是,当我打印json时,它会按如下方式为每行打印两次,而不是一次

{
“响应数据”:
[[“澳大利亚”、“维多利亚”、“墨尔本”、“澳大利亚”、“新南威尔士”、“悉尼”],
[“澳大利亚”、“维多利亚”、“墨尔本”、“澳大利亚”、“新南威尔士”、“悉尼”]]

}

您正在创建一行,并将其添加到数组中两次。线路

JsonArray row = new JsonArray();

应该位于循环内部。不在外部。

我认为您应该将此代码添加到while()的开头

row = new JsonArray();