java - 需要从以下结果集中按以下方式形成 JSON 响应

标签 java json loops 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();

最佳答案

我真的不知道你想使用什么 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);
}

不太确定这是否是您的要求。

关于java - 需要从以下结果集中按以下方式形成 JSON 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39618427/

相关文章:

swift - do/while 循环声明和其他错误

javascript - 如何遍历oData中的每个对象?

json - Terraform 是否支持仅进行少量操作的 CloudFormation 模板

php - 将 MySQL 数据编码为 JSON

java - 有没有办法将 Java TreeMap 序列化为 JSON?

java - 我可以在输入时清除 JTable 中的文本吗?

java - 仅使用 Random 而不使用 ArrayList 写入不重复的随机数

java - OpenJDK 10 拒绝所有 SSL 证书

java - 返回带有 switch 大小写的字符串

java - 如何从 hibernate 创建/调用 mysql 事件?