Returning JSON response from Servlet to Javascript/JSP page

后端 未结 3 1944
小蘑菇
小蘑菇 2020-11-30 05:29

I think (actually I KNOW!) I\'m doing something wrong here I am trying to populate some values into HashMap and add each hasmap to a list which will be added to a JSON objec

相关标签:
3条回答
  • 2020-11-30 05:41

    Got it working! I should have been building a JSONArray of JSONObjects and then add the array to a final "Addresses" JSONObject. Observe the following:

    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());
    

    This worked and returned valid and parse-able JSON. Hopefully this helps someone else in the future. Thanks for your help Marcel

    0 讨论(0)
  • 2020-11-30 05:41

    I used JSONObject as shown below in Servlet.

        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);
    

    The Servlet returns this JSON object as shown below:

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

    This Servlet is called from Browser using AngularJs as below

    $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);
        });
    
    };
    

    This code worked and it is showing correct data in alert dialog box:

    Data.header.status : Success

    Data.header.FailureReason : None

    Data.header.DetailElements : 2

    Data.Elements : Coma seperated string values i.e. NhAdminTree, userName

    0 讨论(0)
  • 2020-11-30 06:03

    I think that what you want to do is turn the JSON string back into an object when it arrives back in your XMLHttpRequest - correct?

    If so, you need to eval the string to turn it into a JavaScript object - note that this can be unsafe as you're trusting that the JSON string isn't malicious and therefore executing it. Preferably you could use jQuery's parseJSON

    0 讨论(0)
提交回复
热议问题