在Java程序開發(fā)中,經(jīng)常需要將MySQL數(shù)據(jù)庫查詢的結(jié)果轉(zhuǎn)換為JSON格式。JSON格式以其簡潔性和易讀性而成為了現(xiàn)在Web開發(fā)領(lǐng)域中最受歡迎的數(shù)據(jù)交換格式之一。Java中有很多庫可以實(shí)現(xiàn)將MySQL查詢結(jié)果轉(zhuǎn)換為JSON格式,例如GSON、Jackson等等。
GSON是Google發(fā)布的一個JSON庫,是一個處理JSON格式數(shù)據(jù)的Java庫。 在簡單的場景下,使用GSON轉(zhuǎn)換MySQL結(jié)果至JSON是非常簡單的。下面的代碼展示了使用GSON庫獲取MySQL結(jié)果,并將其轉(zhuǎn)換為JSON格式:
// 獲取MySQL結(jié)果集 PreparedStatement ps = conn.prepareStatement("SELECT * FROM books"); ResultSet rs = ps.executeQuery(); // 定義一個JSON數(shù)組來存儲MySQL查詢結(jié)果 JsonArray jsonArray = new JsonArray(); // 遍歷MySQL結(jié)果集 while (rs.next()) { // 取出每一行查詢結(jié)果并組裝成JSONObject JsonObject jsonObject = new JsonObject(); jsonObject.addProperty("id", rs.getString("id")); jsonObject.addProperty("title", rs.getString("title")); jsonObject.addProperty("author", rs.getString("author")); jsonObject.addProperty("price", rs.getDouble("price")); // 添加到JSON數(shù)組中 jsonArray.add(jsonObject); } // 將JSON數(shù)組轉(zhuǎn)為JSON字符串 String json = new Gson().toJson(jsonArray);
以上代碼會生成一個包含MySQL結(jié)果的JSON字符串。但是,在數(shù)據(jù)查詢比較復(fù)雜的情況下,以上的代碼實(shí)現(xiàn)方式并不適用。因?yàn)镽esultSet的模型并不支持嵌套的JSON結(jié)構(gòu)。這時候,我們可以借助JSON框架(例如Jackson),手動構(gòu)造JSON結(jié)構(gòu)。
下面的代碼展示了使用Jackson進(jìn)行MySQL結(jié)果轉(zhuǎn)換到JSON的方式:
// 獲取MySQL結(jié)果集 PreparedStatement ps = conn.prepareStatement("SELECT * FROM books"); ResultSet rs = ps.executeQuery(); // 定義一個List來存儲MySQL查詢結(jié)果 List<HashMap<String, Object>> data = new ArrayList<>(); // 遍歷MySQL結(jié)果集 while (rs.next()) { HashMap<String, Object> row = new LinkedHashMap<>(rs.getMetaData().getColumnCount()); for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) { row.put(rs.getMetaData().getColumnLabel(i), rs.getObject(i)); } data.add(row); } // 構(gòu)造JSON對象 ObjectNode node = new ObjectMapper().createObjectNode(); ArrayNode rows = node.putArray("rows"); for (HashMap<String, Object> row : data) { ObjectNode rowNode = rows.addObject(); for (Map.Entry<String, Object> entry : row.entrySet()) { rowNode.put(entry.getKey(), String.valueOf(entry.getValue())); } } // 將JSON對象轉(zhuǎn)為JSON字符串 String json = node.toString();
以上代碼同樣能夠?qū)ySQL結(jié)果轉(zhuǎn)化為JSON格式字符串。在復(fù)雜場景下,手動構(gòu)造JSON結(jié)構(gòu)的方式可以更加靈活地處理JSON的嵌套結(jié)構(gòu)。