这可能很简单,但我无法弄明白。
这是我从数据库收到的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();
答案 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();