【问题标题】:How to send JSON array from server to client, i.e. (java to AJAX/Javascript)?如何将 JSON 数组从服务器发送到客户端,即(java 到 AJAX/Javascript)?
【发布时间】:2011-10-28 09:02:38
【问题描述】:

我的 JSON.java 文件中有以下 JSON 数组:

ArrayList array=new ArrayList();
array.add("D");
array.add("A");
array.add("L");

我想将数组发送到位于 AJAX.jsp 中的 AJAX 脚本。 我知道如何通过例如接收 AJAX 中的文本

document.getElementById("txtHint").innerHTML=xmlhttp.responseText;

但我不知道如何将数组从服务器发送到客户端! 感谢您的帮助

【问题讨论】:

  • 也许在呈现的 HTML 上创建一个包含 JSON 序列化数组的输入?
  • 请注意,当 JSON 数组直接从请求返回到服务器时,旧浏览器存在安全漏洞,这可能会使您的客户端暴露于跨站点脚本攻击。 haacked.com/archive/2008/11/20/…
  • 次要的 nitpick:您拥有的是 Java 列表,而不是 JSON 数组...但您想将其作为 JSON 数组发送。

标签: java javascript ajax json


【解决方案1】:

好的,首先:

ArrayList array=new ArrayList();
array.add("D");
array.add("A");
array.add("L");
JSONArray array = new JSONArray();

这无法编译...你有一个重复的变量数组;-)

第二步:创建一个 servlet/Struts Action/etc,其中包含创建数组的代码。然后使用 JSON 库将其转换为 JSON。最后,将字符串放入 servlet/Struts Action/等的响应中。

使用 JQuery 来减轻您在 Ajax 调用上的工作量。它将帮助您进行 Ajax 调用以及从 http 响应中收到的字符串转换回 Json。

例如:

你的 ajax 调用应该是这样的(使用 JQuery)

$.getJSON("http://yourserver/JSONServlet",
    function(data){
           alert (data) // this will show your actual json array
      });
    });

你的 servlet 应该是这样的:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import net.sf.json.JSONArray;

public class JSONServlet extends  HttpServlet{
  public void doGet(HttpServletRequest request,
  HttpServletResponse response)
   throws ServletException,IOException{
 JSONArray arrayObj=new JSONArray();
 arrayObj.add("D");
 arrayObj.add("A");
 arrayObj.add("L");
 arrayObj.add("D");
 arrayObj.add("A");
 arrayObj.add("TEST");
  PrintWriter out = response.getWriter();
  out.println(arrayObj);
  for(int i=0;i<arrayObj.size();i++){
  out.println(arrayObj.getString(i));
  }
 }
}

【讨论】:

  • 这是一个打字错误,我已经编辑过了。其次,我被困在如何发送 JSON 数组作为对以下 AJAX 行接收和读取的响应:document.getElementById("txtHint").innerHTML=xmlhttp.responseText; 你能举一个简单的例子吗?
【解决方案2】:

您基本上使用 java 中的某些类,例如此处定义的类:http://json.org/java/ 将最终输出转换为 json 字符串,然后将其发送到 javascript,您可以使用 eval 或可能使用名为的库将 json 字符串转换回 json json2.js,你都准备好了..

这是相同的代码:

JSONObject obj=new JSONObject();
  obj.put("name","foo");
  obj.put("num",new Integer(100));
  obj.put("balance",new Double(1000.21));
  obj.put("is_vip",new Boolean(true));
  obj.put("nickname",null);
  StringWriter out = new StringWriter();
  obj.writeJSONString(out);
  String jsonText = out.toString();
  System.out.print(jsonText);

了解更多http://code.google.com/p/json-simple/wiki/EncodingExamples

【讨论】:

    【解决方案3】:

    不要像已经建议的那样使用 org.json 的准系统库,而是考虑使用数据绑定 JSON 库,例如 JacksonGSON(还有很多其他的),在这种情况下,您可以简化 servlet 案例(使用 Jackson ) 到:

    new ObjectMapper().writeValue(response.getOutputStream(), array);

    这就是你所需要的。

    对于更简单的处理,JAX-RS 服务(Jersey、RESTeasy、CXF)可以进一步简化处理,与原始 servlet 相比,减少您需要的代码。 JAX-RS + JSON 是在 Java 上实现 Web 服务的现代方式,因此现在学习它可能很有意义。

    【讨论】:

      【解决方案4】:

      最简单的方法是在java文件中构造一个json字符串并将该json字符串返回给客户端。

      Javascript 提供了一个 eval() 方法将 json 字符串反转为 json 对象。

      然后你可以执行你需要的任何操作。

      【讨论】:

        猜你喜欢
        • 2020-02-28
        • 2023-03-08
        • 1970-01-01
        • 1970-01-01
        • 2012-12-15
        • 2013-11-16
        • 1970-01-01
        • 1970-01-01
        • 2015-05-23
        相关资源
        最近更新 更多