簡體   English   中英

如何在Servlet內的JSONObject中放置對象的JSONArray

[英]How to put JSONArray of object in JSONObject inside servlet

我正在嘗試使用$ .ajax()方法動態填充多個選擇框。...這是我的html代碼...

    <select id="imageSize" name="ImageSizeId"></select>
    <select id="circulation" name="circulationId"></select>

這是我的servlet代碼.....

    protected void doGet(HttpServletRequest request, HttpServletResponse response)   throws ServletException, IOException {
    response.setContentType("text/json;charset=utf-8");
    response.setHeader("Cache-Control", "no-cache");
    PrintWriter out = response.getWriter();
    JSONObject usesfactors = new JSONObject();  
    JSONArray jArraysize = new JSONArray();
    JSONArray jArraycirculation = new JSONArray();
    Statement stmtsize,stmtcirculation;
    ResultSet rssize,rscirculation;
    int category_id = Integer.parseInt(request.getParameter("CategoryId"));
    int format_id = Integer.parseInt(request.getParameter("FormatId"));
    String size,display,des;
    int sizeid;



  try {
          if(category_id == 2 && format_id == 201){

    // Get image size factors

                     String sql1="SELECT SizeId,Size FROM Size WHERE Category_id = "+category_id+" AND Format_id = "+format_id+" ";                                          
                     PreparedStatement ps1 = conn.prepareStatement(sql1);
                     rssize =  ps1.executeQuery() ; 

                    if( rssize!=null){
                               System.out.println("Not Null");// its printing even if resultset rssize has no records.......why?
                            while(rssize.next())
                                {   
                                     System.out.println("inside resultset");            
                                     JSONObject jobj = new JSONObject();  
                                     sizeid = rssize.getInt("SizeId");
                                     size=rssize.getString("Size");  
                                     System.out.println(size);
                                     jobj.put("SizeId", sizeid);
                                     jobj.put("Size", size);                        
                                     jArraysize.add(jobj);
                                }
                              usesfactors.put("Size", jArraysize);
                              rssize.close();
                    }
                    else{
                              System.out.println("Does not have Size factors");
                    }

    // Get image circulation factors  

                    String sql2="SELECT circulationId,circulation FROM Circulation WHERE Category_id = "+category_id+" AND Format_id = "+format_id+" ";
                    PreparedStatement ps2 = conn.prepareStatement(sql2);                      
                    rscirculation =  ps2.executeQuery() ;    

                    if(rscirculation!=null){
                            while(rscirculation.next())
                                {      

                                     JSONObject jobj = new JSONObject();  
                                     display = rscirculation.getString("DisplayName");
                                     des=rscirculation.getString("Description");                                               
                                     jobj.put("DisplayName", display);
                                     jobj.put("Description", des);                        
                                     jArraycirculation.add(jobj);

                                }
                            usesfactors.put("Circulation", jArraycirculation);
                            rscirculation.close();
                  }
                    else{
                              System.out.println("Does not have Circulation factors");
                    }

                  out.println(usesfactors);
          }

我得到的是空的json結果...。錯了嗎? {“ Size”:[],“ Circulation”:[]}我不想執行此stmt“ usesfactors.put(” Size“,jArraysize);” 如果resultset rssize為null,但是即使結果集rssize沒有記錄,此stmt也將執行。...總之,當且僅當結果集rssize有記錄時,我想將json array(jArraysize)放在json對象(usesfactors)中。

The problem in your code might be your sql queries which are not returning any values.because i have done in my IDE in the same way you have done,only difference is that instead of getting values from database i have kept manually by iterating for loop.below is the code...
JSONObject usesfactors = new JSONObject();  
             JSONArray jArraysize = new JSONArray();
             JSONArray jArraycirculation = new JSONArray();

             for(int i=0;i<3;i++)
             {
             JSONObject jobj = new JSONObject();  
             jobj.put("SizeId", "1");
             jobj.put("Size", "2");                        
             jArraysize.put(jobj);                
             }
             usesfactors.put("Size", jArraysize);

             for(int i=0;i<3;i++)
             {
                  JSONObject jobj = new JSONObject();  
                  jobj.put("DisplayName", "3");
                  jobj.put("Description", "4");                        
                  jArraycirculation.put(jobj);
             }
             usesfactors.put("Circulation", jArraycirculation);
             System.out.println(usesfactors);

為了回答代碼中有關為什么它進入rssize!=null塊的問題,請參見executeQuery上javadoc 它明確聲明它永遠不會返回null,因此null檢查始終會通過。 這意味着一個空的結果集將跳過該部分中的循環,但仍會達到目標

usesfactors.put("Size", jArraysize);

應該重寫此代碼,以實際上避免在空返回集上插入。 應該進行類似的更改以更正流通部分,這也會導致無效的無效檢查。

while(rssize.next())
{   
  System.out.println("inside resultset");            
  JSONObject jobj = new JSONObject();  
  sizeid = rssize.getInt("SizeId");
  size=rssize.getString("Size");  
  System.out.println(size);
  jobj.put("SizeId", sizeid);
  jobj.put("Size", size);                        
  jArraysize.add(jobj);
}
if (jArraysize.length > 0)
{
  usesfactors.put("Size", jArraysize);
}
else
{
  System.out.println("Does not have Size factors");
}
rssize.close();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM