【问题标题】:How to fetch data from database, hashmap it, converti hashmap to JSONObject list and use it in javascript如何从数据库中获取数据,对其进行哈希映射,将哈希映射转换为 JSONObject 列表并在 javascript 中使用它
【发布时间】:2017-03-22 22:16:24
【问题描述】:

我正在使用(tomcat、jsp、postgres、googlemap 等)开发一个 java web 项目。 postgres 数据库表有 7 列,其中一列是地理数据类型。因此,我使用 Hashmap 检索数据并将其放入 ArrayList 中,并使用以下接收 ResultSet 对象的方法。

  public ArrayList resultSetToArrayList(ResultSet rs) throws SQLException{

  ResultSetMetaData md = rs.getMetaData();
  int columns = md.getColumnCount();
  ArrayList list = new ArrayList();
  ArrayList<HashMap<String, Object>> dataMap = new 
  ArrayList<HashMap<String,Object>>();

  while (rs.next()){
  HashMap row = new HashMap(columns);
        for(int i=1; i<=columns; ++i){                          
            row.put(md.getColumnName(i),rs.getObject(i));
        }
        list.add(row);
    }
  return list;
}

在我的 doGet servlet 方法中,我使用以下代码将 arraylist 转换为 JSONObject 列表,然后将响应转发到 jsp。

ArrayList<HashMap<String, Object>> hashmapData =  
newArrayList<HashMap<String, 
Object>>();
hashmapData = api.resultSetToArrayList(rs);//api is an instance  
                            of my APIService class that contains the method
List<JSONObject> jsonObj = new ArrayList<JSONObject>();

for(HashMap<String, Object> data : hashmapData) { 
        JSONObject obj = new JSONObject(data);
        jsonObj.add(obj);
}
request.setAttribute("data",jsonObj);

              //Disptching request

RequestDispatcher dispatcher =
request.getRequestDispatcher("displayallobjects.jsp");

              if (dispatcher != null){
              dispatcher.forward(request, response);
              } 
  .....
   ....//rest of the code
  }

一切正常,我可以通过以下格式的请求对象在我的 .jsp 文件中检索 JSONObject 列表:

  <script>
        var jsondata = '<%=request.getAttribute("data") %>'
  ....
  </script>

 [{"id":49,"location":"POINT(43.5729914065888 -79.7675657272339)", 
 "questid":3,"image":"images\/science.jpg","type":"science"}, 
 {"id":51,"location":"POINT(43.5725872088145 -79.7640466690063)", 
 "questid":5,"image":"images\/math.jpg","type":"math"}, 
 {"id":52,"location":"POINT(43.5730224986129 -79.7701406478882)", 
 "questid":2,"image":"images\/math.jpg","type":"math"}, 
 {"id":53,"location":"POINT(43.5742972577808 -79.7683811187744)", 
 "questid":1,"image":"images\/english.jpg","type":"english"}, 
 {"id":54,"location":"POINT(43.5707838318471 -79.7665357589722)", 
 "questid":9,"image":"images\/science.jpg","type":"science"}]

现在,我需要使用这些数据在地图上创建标记。我似乎无法以任何方式解析这些数据。我尝试了 JSON.parse(jsondata),以及 javascript 中可用的其他关系函数,如 stringify 等,但没有任何效果。

如何将每个项目的值保存到 javascript 数组变量中,所以我循环遍历数组并使用正确的图标在正确的位置显示标记。??????请帮忙,我花了很多时间试图解决这个问题。没有任何工作。

我认为问题在于 json 对象 [{"":""}] 的格式。但我不知道如何解决它。

【问题讨论】:

  • 使用 JSON.parse 有什么问题?这是有效的 json,它应该解析得很好。 (我使用jsonlint.com检查了json的有效性)
  • 我将如何使用 JSON.parse 函数来获取,让我们说图像路径并将其保存在名为 img 的 var 中?
  • var json = '' for(var i = 0; i
  • 当我尝试上面的代码时,json.length 给出了字符串的总长度,850 并循环遍历每个字符并在警告框中显示“未定义”。我不知道为什么。

标签: javascript json postgresql list hashmap


【解决方案1】:

*********我解决了问题********* 我只需要通过执行 json = JSON.parse(json); 将 json 变量转换回 JSON 对象;以确保 js 不会将其视为字符串。为我修复了它,现在我可以通过使用 obj.image 循环来获取图像。感谢 Ehren Murdick 抽出时间阅读和回复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-19
    • 2016-08-04
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多