通过java从mysql的数据创建json对象

从mysql获取数据后,我需要将数据导出为JSON,格式如下:

{"Thong tin":[{"Ngay":"2013-06-18","Tinh":"An Giang"},{"Ngay":"2013-06-17","Tinh":"Bình Dương"},{"Ngay":"2013-06-16","Tinh":"Bạc Liêu"}]} 

但是,我得到了,就像

 {"Thong tin":[{"Ngay":"2013-06-16","Tinh":"Bạc Liêu"},{"Ngay":"2013-06-16","Tinh":"Bạc Liêu"},{"Ngay":"2013-06-16","Tinh":"Bạc Liêu"}]} 

你能帮我解决这个错误吗?

我的代码:

 acc = new access(); rs2 = acc.query("select province_Name, date_Expired from thong_tin_khach_hang"); List province_Name = new ArrayList(); List date_Expired = new ArrayList(); try { while (rs2.next()) { province_Name.add(rs2.getString(1)); date_Expired.add(rs2.getString(2)); } } catch (SQLException e) { try { acc.con.close(); } catch (SQLException e1) { e1.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } } JSONObject obj = new JSONObject(); JSONArray jarray = new JSONArray(); try { JSONObject ob = new JSONObject(); for (int i = 0; i < province_Name.size(); i++) { ob=new JSONObject(); ob.put("Tinh", province_Name.get(i)); ob.put("Ngay", date_Expired.get(i)); jarray.add(ob); } obj.put("Thong tin", jarray); } catch (JSONException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } out.print(obj); 

以下代码可以帮助您:

 public String getJSONFromResultSet(ResultSet rs,String keyName) { Map json = new HashMap(); List list = new ArrayList(); if(rs!=null) { try { ResultSetMetaData metaData = rs.getMetaData(); while(rs.next()) { Map columnMap = new HashMap(); for(int columnIndex=1;columnIndex<=metaData.getColumnCount();columnIndex++) { if(rs.getString(metaData.getColumnName(columnIndex))!=null) columnMap.put(metaData.getColumnLabel(columnIndex), rs.getString(metaData.getColumnName(columnIndex))); else columnMap.put(metaData.getColumnLabel(columnIndex), ""); } list.add(columnMap); } } catch (SQLException e) { e.printStackTrace(); } json.put(keyName, list); } return JSONValue.toJSONString(json); } 

将结果集和键名传递给参数,并获取响应中的Json字符串。

你为什么不试试谷歌gson 。 它非常简单易用。 在这里查看一些示例

这段代码很棒! 谢谢。 只是一个小改进,下面的代码也支持int值,不会将它们转换为字符串。

 public String getJSONFromResultSet(ResultSet rs,String keyName) { Map json = new HashMap(); List list = new ArrayList(); if(rs!=null) { try { ResultSetMetaData metaData = rs.getMetaData(); while(rs.next()) { Map columnMap = new HashMap(); for(int columnIndex=1;columnIndex<=metaData.getColumnCount();columnIndex++) String val= response.getString(metaData.getColumnName(columnIndex)); String key = metaData.getColumnLabel(columnIndex); if(val== null) columnMap.put(key, ""); else if (val.chars().allMatch(Character::isDigit)) columnMap.put(key, Integer.parseInt(val)); else columnMap.put(key, val); } list.add(columnMap); } } catch (SQLException e) { e.printStackTrace(); } json.put(keyName, list); } return JSONValue.toJSONString(json); }