如何在java中发送字符串文字和json对象?

时间:2017-01-27 05:10:59

标签: java jquery mysql json servlets

我在mysql queries中使用了2个不同的if and else。在if and else中,我正在向客户端发送json object,我使用java objectGSON library序列化,然后使用jquery在客户端进一步操作它。在客户端jquery ajax方法中,我必须确定此json对象来自服务器端代码的哪一部分。例如,它是来自部分还是来自其他部分。假设我在out.println(json+"string_literal")发送了一个String_literal,然后我不知道如何在客户端jquery ajax方法上检查它。可以告诉我如何提取这个string。每次我尝试提取这个字符串或做其他事情时,我都搞砸了json对象。我想做这样的事情....

 success:function(data){
            if(JSON HAS STRING ALONG WITH IT)
           {
             // do this
           }
           else
          {  
                // this
            productContainer.innerHTML ="";
            var $productContainer = $('#productContainer');
            $.each(data,function(key,value){
            $productContainer.append("<div id='productBox' class='grid_3'>\n\
             <a href='product.jsp?id="+value['id']+"'><img src='"+value["image"]+"'/></a><br/>\n\
             <a href='product.jsp?id="+value['id']+"'><span class='black'>"+value['name']+"</span></a><br/>\n\
             <span class='black'>By "+value['company']+"</span><br/><span class='red'>RS."+value['price']+"</span></div>");                                                                                                                                
       }                       
        }) ;
      }      

编辑服务器端代码

  ArrayList<product> p = new ArrayList();
  ps = con.prepareStatement("some query");
  ps.setInt(1,p_id.get(i));
  rs=ps.executeQuery();
  while(rs.next())
   {
     product pr =new product();
     pr.id = rs.getInt("product_id");
     pr.name = rs.getString("product_name");
     pr.company =rs.getString("company_name");
     pr.image = rs.getString("image_name");
     pr.price = rs.getDouble("price");
     p.add(pr);        
   }       

  }

    String json = new Gson().toJson(p);
    response.setContentType("application/json");
    out.println(json);

我真的很感激任何帮助。

2 个答案:

答案 0 :(得分:1)

在JSON括号之外解析连接变量很困难,我建议你在JSON中添加该变量。

如果您选择使用GSON添加变量,则应将其添加到java类中,然后解析它。

示例:

将您的变量添加到java类。

public class Envelope{
    private Array<Product> products;
    private Boolean newVariable;
    ... 
    // getter's and setter's
}

使用GSON解析对象:

Envelope envelope = new Envelope();
envelope.setNewVariable(true);
envelope.setProducts(products);

Gson gson = new Gson();
String jsonInString = gson.toJson(envelope);

然后在JSP上打印字符串

out.print(jsonString)

最后,在JQuery方面,如果ajax请求成功,那么你应该能够在

看到你的变量
success:function(data){
        if( data.newVariable == true) // suppose new variable is boolean
       {
         // do this
         var products[] = data.products;
       } else {
           // do other thing
       }
}

答案 1 :(得分:1)

最简单的方法是将此变量添加到您的JSON响应中。您可以创建一个附加类来包装产品列表和这个附加变量,或者只使用如下地图:

// ... create your product ArrayList as before

Map<String, ?> result = new HashMap<>();
result.put("variable", "some_value");
result.put("products", p);

String json = new Gson().toJson(result);
response.setContentType("application/json");
out.println(json);

然后在客户端:

success: function(data) {
   if (data.variable === 'some value') {
       // do your stuff
   } else {
       // ...

       $.each(data.products, function(key, value) { /* ... */ }
   }
}