Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将JSON响应从Servlet返回到Javascript/JSP页面_Java_Json_Gson - Fatal编程技术网

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

将JSON响应从Servlet返回到Javascript/JSP页面,java,json,gson,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 Ha

我想(事实上我知道!)我做错了,我试图将一些值填充到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响应返回的很好,但它是一个字符串。非常感谢您的建议。我也开始使用谷歌Gson,但对这方面的知识不多。

我认为您要做的是在JSON字符串返回XMLHttpRequest时将其转换为对象-正确吗


如果是这样的话,您需要将该字符串转换为JavaScript对象——请注意,这可能是不安全的,因为您相信JSON字符串不是恶意的,因此执行它。最好您可以使用jQuery的

让它工作起来!我应该构建一个
JSONObject
s的
JSONArray
,然后将数组添加到最终的“地址”
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());
JSONObject json=new JSONObject();
JSONArray addresses=新的JSONArray();
JSONObject地址;
尝试
{
整数计数=15;

对于(inti=0;i我使用了JSONObject,如下所示

    JSONObject jsonReturn = new JSONObject();

    NhAdminTree = AdminTasks.GetNeighborhoodTreeForNhAdministrator( connection, bwcon, userName);

    map = new HashMap<String, String>();
    map.put("Status", "Success");
    map.put("FailureReason", "None");
    map.put("DataElements", "2");

    jsonReturn = new JSONObject();
    jsonReturn.accumulate("Header", map);

    List<String> list = new ArrayList<String>();
    list.add(NhAdminTree);
    list.add(userName);

    jsonReturn.accumulate("Elements", list);
使用AngularJs从浏览器调用此Servlet,如下所示

$scope.GetNeighborhoodTreeUsingPost = function(){
    alert("Clicked GetNeighborhoodTreeUsingPost : " + $scope.userName );

    $http({

        method: 'POST',
        url : 'http://localhost:8080/EPortal/xlEPortalService',
        headers: {
           'Content-Type': 'application/json'
         },
        data : {
            'action': 64,
            'userName' : $scope.userName
        }
    }).success(function(data, status, headers, config){
        alert("DATA.header.status : " + data.Header.Status);
        alert("DATA.header.FailureReason : " + data.Header.FailureReason);
        alert("DATA.header.DataElements : " + data.Header.DataElements);
        alert("DATA.elements : " + data.Elements);

    }).error(function(data, status, headers, config) {
        alert(data + " : " + status + " : " + headers + " : " + config);
    });

};
此代码正常工作,并在警报对话框中显示正确的数据:

Data.header.status:成功

Data.header.FailureReason:无

Data.header.DetailElements:2


Data.Elements:Coma分离的字符串值,即nAdminTree、userName

Hi,我尝试过使用它,我得到的只是一个返回的对象-请看这个线程:这解释了我认为返回的是有效的JSON。但是,看起来它实际上是一个返回的字符串,所以我很难解析它-这就是我为什么这么做的原因这里提出的问题与尝试将JSON传递回我的JavaScript函数有关。问题是关于发送JSON编码的字符串,而不是如何在JavaScript中处理它。您不应该尝试自己创建JSON编码的字符串;如果您的服务器端代码没有提供库函数来正确编码对象转换为JSON编码的字符串。可能与如何在ajax中读取此内容重复,我尝试了
alert(responsedata.Addresses.CustomerName);
mazing!我在GAE中使用了此选项,并与内置的
import com.google.appengine.labs.repackaged.org.JSON.JSONObject
包配合使用,非常感谢。
    response.setContentType("application/json");
    response.getWriter().write(jsonReturn.toString());
$scope.GetNeighborhoodTreeUsingPost = function(){
    alert("Clicked GetNeighborhoodTreeUsingPost : " + $scope.userName );

    $http({

        method: 'POST',
        url : 'http://localhost:8080/EPortal/xlEPortalService',
        headers: {
           'Content-Type': 'application/json'
         },
        data : {
            'action': 64,
            'userName' : $scope.userName
        }
    }).success(function(data, status, headers, config){
        alert("DATA.header.status : " + data.Header.Status);
        alert("DATA.header.FailureReason : " + data.Header.FailureReason);
        alert("DATA.header.DataElements : " + data.Header.DataElements);
        alert("DATA.elements : " + data.Elements);

    }).error(function(data, status, headers, config) {
        alert(data + " : " + status + " : " + headers + " : " + config);
    });

};