怎样在java中查询mysql得到如下的json格式的结果?

现在mysql中有两个表,一个是:table_a,保存了页面的一些name,url,page等字段信息,另外一个表table_b保存了页面内的外链信息:name,url,table_a,table_b之间通过id相关联,一对多的关系。请问如何查询mysql可以获得如下的json结果集。

{

"name": "BeJson",
"url": "http://www.bejson.com",
"page": 88,
"isNonProfit": true,   
"links": [
    {
        "name": "Google",
        "url": "http://www.google.com"
    },
    {
        "name": "Baidu",
        "url": "http://www.baidu.com"
    },
    {
        "name": "SoSo",
        "url": "http://www.SoSo.com"
    }
]

}

阅读 7.1k
4 个回答

Java中查询出来一般不会是JSON,都是Object。你要把Object返回给前端或者客户端的时候,用Jackson或者FastJSON把Object转换成JSON格式。不知道你想在哪用JSON,所以只能这么回答了。

和数据库没关系,和你使用的ormap 也就是dao层实现有关。有的dao实现支持自动将1:n情况下n的数据自动从数据库提取出来。

设唯一标识用户的是id

String jsonString = "{";
preparedStatement = connection.prepareStatement("select name,url,page from table_a where id = 1 limit 1");
ResultSet rs = preparedStatement.executeQuery();
rs.first();
String name = rs.getString(1);
String url = rs.getString(2);
String page = rs.getInt(3);
jsonString += "'name':'" +name+ "',";
jsonString += "'url':'" + url + "',";
jsonString += "'page':" + page + ",";
jsonString += "'links':[";
rs = preparedStatement.executeQuery("select name,url from table_b where frid=1");
while(rs.next()){
    jsonString+="{'name':'"+rs.name+"',";
    jsonString+="'url':'"+rs.url+"'},";
}
jsonString = jsonString.substring(0,jsonString.length()-1);
jsonString += "]}";
rs.mustclose();
preparedStatement.mustclose();
connection.mustclose();
writer.write(jsonString);
writer.mustclose();

在安卓端请求该servlet后返回的jsonString用JSONObject 或其他工具类转化为json对象用

题主,可以创建一个包含这些属性的pojo,在这个pojo类中将links属性设为List类型,然后查询查询两张表然后将查到的值赋给相应的属性就可以了,然后用楼上说的方法将这个对象转成json即可。或者就是用orm框架比如hibernate或者mybatis也可以

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题