需要从以下结果集以下列方式形成JSON响应

时间:2016-09-21 13:46:43

标签: java json loops resultset

这可能很简单,但我无法弄明白。

这是我从数据库收到的ResultSet。

Name        Method      Value
Website     Online      450
Website     Offline     500
Mobile      Online      100
Mobile      Offline     600

我需要以下面的JSON格式将响应发送到前端。

response: [
        {
          "Name" : "Website",
          "Online" : 450,
          "Offline" : 500
        },
        {
          "Name" : "Mobile",
          "Online" : 100,
          "Offline" : 600
        }
]

我需要在单个循环中形成JSON,最好是在读取ResultSet本身时。实现这一目标的最佳方法是什么? 在此先感谢。!

P.S:查询已经是一个复杂的问题,因此无法转动表格 - 性能问题。上面的ResultSet是一个示例,ResultSet中可能有数百条记录

更新: 我不确定以下解决方案的效率如何,但它确实有用。!

 Map<String, Map<String, Object>> objectMap = new LinkedHashMap<String,Map<String, Object>>();
 Map<String, Object> map;
  while(rs.next()){
     if(objectMap.containsKey(rs.getString("Name"))){
        map = objectMap.get(rs.getString("Name"));
        map.put(rs.getString("Method"), rs.getInt("Value"));
    }
    else {
      map = new HashMap<String, Object>();
      map.put("Tag", 0);
      map.put("Plate", 0);
      map.put("Name", rs.getString("Name"));
      map.put(rs.getString("Method"), rs.getInt("Value"));
    }
    objectMap.put(rs.getString("Name"), map);
 }

return objectMap.values();

2 个答案:

答案 0 :(得分:0)

我真的不知道你想要使用什么JSON库但是......

JSONArray jarray = new JSONArray();
for (Result result : results) {
    JSONObject obj = new JSONObject();
    obj.put("Name", result.name);
    obj.put("Method", result.method);
    obj.put("Value", result.value);
    jarray.put(obj);
}

不确定这是不是你的要求。

答案 1 :(得分:0)

Map<String, Map<String, Object>> objectMap = new LinkedHashMap<String,Map<String, Object>>();
Map<String, Object> map;
 while(rs.next()){
     if(objectMap.containsKey(rs.getString("Name"))){
        map = objectMap.get(rs.getString("Name"));
        map.put(rs.getString("Method"), rs.getInt("Value"));
    }
    else {
      map = new HashMap<String, Object>();
      map.put("Tag", 0);
      map.put("Plate", 0);
      map.put("Name", rs.getString("Name"));
      map.put(rs.getString("Method"), rs.getInt("Value"));
    }
    objectMap.put(rs.getString("Name"), map);
 }

return objectMap.values();