java - 将 JSON 响应从 Servlet 返回到 Javascript/JSP 页面

标签 java json gson

我想(实际上我知道!)我在这里做错了我试图将一些值填充到 HashMap 并将每个 hasmap 添加到一个列表,该列表将被添加到一个 JSON 对象:

JSONObject json = new JSONObject();
try
{
    Map address;
    List addresses = new ArrayList();

    int count = 15;

    for (int i=0 ; i<count ; i++)
    {
        address = new HashMap();
        address.put("CustomerName"     , "Decepticons" + i);
        address.put("AccountId"        , "1999" + i);
        address.put("SiteId"           , "1888" + i);
        address.put("Number"            , "7" + i);
        address.put("Building"          , "StarScream Skyscraper" + i);
        address.put("Street"            , "Devestator Avenue" + i);
        address.put("City"              , "Megatron City" + i);
        address.put("ZipCode"          , "ZZ00 XX1" + i);
        address.put("Country"           , "CyberTron" + i);
        addresses.add(address);
    }
    json.put("Addresses", addresses);
}
catch (JSONException jse)
{

}
response.setContentType("application/json");
response.getWriter().write(json.toString());

我的问题是我知道这会返回一个字符串,我似乎无法解析它(这就是问题所在)。我的问题是如何返回实际的 JSON 编码字符串(或者我应该这样做?)或者针对此类问题的最佳攻击方法是什么。我为此使用的 JavaScript 如下:

function getReadyStateHandler(req)
{
    // Return an anonymous function that listens to the
    // XMLHttpRequest instance
    return function ()
    {
        // If the request's status is "complete"
        if (req.readyState == 4)
        {
            // Check that a successful server response was received
            if (req.status == 200)
            {
                msgBox("JSON Response recieved...");
                populateDatagrid(req.responseText.toJSON());
            }
            else
            {
                // An HTTP problem has occurred
                alert("HTTP error: " + req.status);
            }
        }
    }
}

注意 JSON 响应返回正常,但它是一个字符串。任何意见是极大的赞赏。我也愿意使用 googles Gson,但对此了解不多。

最佳答案

成功了!我应该构建一个 JSONObjectJSONArray,然后将该数组添加到最终的“Addresses”JSONObject。请注意以下几点:

JSONObject json      = new JSONObject();
JSONArray  addresses = new JSONArray();
JSONObject address;
try
{
   int count = 15;

   for (int i=0 ; i<count ; i++)
   {
       address = new JSONObject();
       address.put("CustomerName"     , "Decepticons" + i);
       address.put("AccountId"        , "1999" + i);
       address.put("SiteId"           , "1888" + i);
       address.put("Number"            , "7" + i);
       address.put("Building"          , "StarScream Skyscraper" + i);
       address.put("Street"            , "Devestator Avenue" + i);
       address.put("City"              , "Megatron City" + i);
       address.put("ZipCode"          , "ZZ00 XX1" + i);
       address.put("Country"           , "CyberTron" + i);
       addresses.add(address);
   }
   json.put("Addresses", addresses);
}
catch (JSONException jse)
{ 

}
response.setContentType("application/json");
response.getWriter().write(json.toString());

这有效并返回了有效且可解析的 JSON。希望这对将来的其他人有帮助。感谢您的帮助马塞尔

关于java - 将 JSON 响应从 Servlet 返回到 Javascript/JSP 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6154845/

相关文章:

JAVA 不兼容的类型值

java - 如何在 JLabel 上显示多个图像

javascript - phonegap读写json文件

python - 如何使用 json_normalize 扁平化嵌套 Json 数据

java - 是否可以让 Gson 跳过类型错误的字段?

java - 在 Retrofit baseUrl 中使用模拟器 ip 地址 10.0.2.2

java - 使用Gson将JSON反序列化为java记录

java - Java 中的#ifdef#ifndef

java - 使用 "server.context-parameters.*"定义的属性在 Java EE 服务器上不起作用

json - 如何获取 Spark 驱动程序指标 json?