(如果你觉得这里不好看,你可以直接往下拖到你进入正题部分)
在进入正题前,先来讲讲自己的经历,用layui框架来建立后台用户数据管理时,获得数据出现了难题,以前开发接口用别人的,没想到现在自己也要开发接口,刚开始很难(个人觉得,可能自己太笨了),不知道从哪里下手,于是进入百度搜索,就连用什么关键词搜索都不知道,但是我知道,按照自己的想法来,开始我这这么搜索的:layui表格数据 java获得数据转换为json, 结果还是可以搜索出来的:
但是,当点进去的时候,有好多都不满足自己,不是看不懂,就是嫌弃太长,(这可不是好习惯),然后根据一篇做了一下,捣鼓了一下,还是不行,没办法,又网上找资料,根据前面搜索,以及自己实践,知道该怎么搜索了,那就是自己搜索:java转换为json 效果但是也不是很好,但是根据自己的不断搜索,不断实践,知道了gson包,在线文档, 包下载地址,包下载地址进去自己搜索,
如图就是它了,把它导入项目,然后我们继续,刚开始我是这样写的代码:(部分代码不全,不过没关系,我会详细讲解,这里只是展示)
JsonObject json = new JsonObject();
JsonArray jsonDateArray = new JsonArray();
JsonObject jsonDate2 = new JsonObject();
json.addProperty("code", 0);
json.addProperty("msg", "");
json.addProperty("count", 1000);
while(rs.next()){
//得到结果集(rs)的结构信息,比如字段数、字段名等。
ResultSetMetaData rsmd = (ResultSetMetaData) rs.getMetaData();
//返回此 ResultSet对象中的列数。
int icolnum = rsmd.getColumnCount();
for(int i= 1;i<= icolnum;i++){
//转换为json 类型
if(rs.getString(i).equals("user")){
jsonDate2.addProperty(rsmd.getColumnName(i).toString(),"普通用户");
}else if(rs.getString(i).equals("admin_1")){
jsonDate2.addProperty(rsmd.getColumnName(i).toString(),"一级管理员");
}else if(rs.getString(i).equals("admin_2")){
jsonDate2.addProperty(rsmd.getColumnName(i).toString(),"二级管理员");
}else if(rs.getString(i).equals("SuperAdmin")){
jsonDate2.addProperty(rsmd.getColumnName(i).toString(),"超级管理员");
}else{
jsonDate2.addProperty(rsmd.getColumnName(i).toString(), rs.getString(i));
}
}
jsonDateArray.add(jsonDate2);
System.out.println(jsonDateArray);
}
json.add("data", jsonDateArray);
return json;
jsonDateArray.add(jsonDate2); 这里,就是把数据库里获得的数据保存到jsonDateArray里面去,但是重复了,也就是出现数据后面添加的吧前面的重复掉了。
如上图,由于截图有限,看不出什么效果,简单的说就是数据到最后都变成一样的了。到现在还没找到解决的办法,现在猜想是因为用列表名作为key,可能因为这个重复(个人猜测,如果你知道,感谢你的留言,我也想知道答案),在解决这个问题中,可以说是花了一半天的时间,还是没有解决,没办法,改变思路:
————————————————————————————————————————————————————————
————————————————————————————————————————————————————————
先看代码:*(一个方法完整方法,最后返回的就是json 格式了)
/*
* 查询用户表,用于后台管理用户
*/
public JsonObject select_(){
Connection con = null; //定义引用
Statement stmt = null;
ResultSet rs = null;
try {
/*
* 一、得到连接
*/
con = JdbcUtils_v10.getConnection();
/*
* 二、准备模块
*/
String sql = "select id,login,email,jurisdiction,sex,signature,experience,count,joinTime from user";
PreparedStatement pstmt = con.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
/*
* 三、为pstmt中的问号赋值
*/
/*
* 四、执行
*/
rs = pstmt.executeQuery();
/*
* 五、把rs 转换为User类型
*/
if(rs == null) {
return null;
}
Gson gson = new Gson();
HashMap hm = new HashMap();
JsonArray jsonarray = new JsonArray();
JsonObject json = new JsonObject();
String Shm = null;
json.addProperty("code", 0);
json.addProperty("msg", "");
json.addProperty("count", 1000);
while(rs.next()){
//得到结果集(rs)的结构信息,比如字段数、字段名等。
ResultSetMetaData rsmd = (ResultSetMetaData) rs.getMetaData();
//返回此 ResultSet对象中的列数。
int icolnum = rsmd.getColumnCount();
for(int i= 1;i<= icolnum;i++){
//转换为json 类型
if(rs.getString(i).equals("user")){
hm.put(rsmd.getColumnName(i).toString(),"普通用户");
}else if(rs.getString(i).equals("admin_1")){
hm.put(rsmd.getColumnName(i).toString(),"一级管理员");
}else if(rs.getString(i).equals("admin_2")){
hm.put(rsmd.getColumnName(i).toString(),"二级管理员");
}else if(rs.getString(i).equals("SuperAdmin")){
hm.put(rsmd.getColumnName(i).toString(),"超级管理员");
}else{
hm.put(rsmd.getColumnName(i).toString(), rs.getString(i));
}
}
jsonarray.add(gson.toJsonTree(hm));
System.out.println(jsonarray);
}
json.add("data", jsonarray);
System.out.println(json);
return json;
}catch (Exception e) {
throw new RuntimeException(e);
}finally{
//关闭
try {
if(rs != null)rs.close();
if(stmt != null)stmt.close();
if(con != null)con.close(); //必须要关
}catch(Exception e) {
throw new RuntimeException(e);
}
}
}
以上代码讲解:(由于是完成测试可以了,直接就来写文档了)
要注意几个地方,
HashMap
这里就是吧获得到的数据通过HashMap保存起来,然后通过gson.toJsonTree(hm)转换为对象。然后添加在jsonarray里面。
------------------
jsonarray.add(gson.toJsonTree(hm))
gson.toJsonTree(HashMap
gson.toJson(HashMap
上面红色两句一定要明白,他们返回的类型,刚开始我使用的时toJson 返回的时字符串,返回添加在jsonarray里去,出现了转义字符,且还是字符串,如图:
是不是感觉自己头大了,我也是,在这里就得说说看文档的重要性了,以及英语的重要性(显然,我两个都不满足,又浪费了很多时间,)如果你看文档了,就知道用哪个方法来解决了。
就是它:gson.toJsonTree(HashMap
我们再来看看:
是不是一切都解决了。简单吧。
接口里是这样的:通过out.print(json)在浏览器输出,然后layui框架里用这个接口就可以了。(layui 文档讲的很详细,一定要仔细,不然很浪费时间,别走我走过的路)
在这里,文章讲的也差不多了。可能还有一些地方没有表达的清楚,你可以加我qq363491343 我们共同讨论学习,
最后就是提个醒(这篇文章主要讲java 转换 json ):
layui 表格数据时,从接口获得的数据名称一定要和
微信公众号: