2013-10-24 373 views
24

我是新來的java,我在這個問題上掙扎了兩天,最後決定在這裏問。如何閱讀在servlet中由ajax發送的json

我想讀的jQuery發送,所以我可以在我的servlet用它

jQuery的

var test = [ 
    {pv: 1000, bv: 2000, mp: 3000, cp: 5000}, 
    {pv: 2500, bv: 3500, mp: 2000, cp: 4444} 
]; 

$.ajax({ 
    type: 'post', 
    url: 'masterpaket', 
    dataType: 'JSON', 
    data: 'loadProds=1&'+test, //NB: request.getParameter("loadProds") only return 1, i need to read value of var test 
    success: function(data) { 

    }, 
    error: function(data) { 
     alert('fail'); 
    } 
}); 

的Servlet

protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    if (request.getParameter("loadProds") != null) { 
     //how do i can get the value of pv, bv, mp ,cp 
    } 
} 

我真的很感激任何幫助,您可以提供數據。

+0

我不太瞭解javascript。它如何序列化var''test'? –

回答

25

您將無法解析它在服務器上,除非你正確發送:

$.ajax({ 
    type: 'get', // it's easier to read GET request parameters 
    url: 'masterpaket', 
    dataType: 'JSON', 
    data: { 
     loadProds: 1, 
     test: JSON.stringify(test) // look here! 
    }, 
    success: function(data) { 

    }, 
    error: function(data) { 
     alert('fail'); 
    } 
}); 

您必須使用JSON.stringify將您的JavaScript對象作爲JSON字符串發送。

然後在服務器上:

String json = request.getParameter("test"); 

你可以手工解析json串,或使用任何庫(我會建議gson)。

5

你將不得不使用JSON解析器解析數據到servlet

import org.json.simple.JSONObject; 


// this parses the json 
JSONObject jObj = new JSONObject(request.getParameter("loadProds")); 
Iterator it = jObj.keys(); //gets all the keys 

while(it.hasNext()) 
{ 
    String key = it.next(); // get key 
    Object o = jObj.get(key); // get value 
    System.out.println(key + " : " + o); // print the key and value 
} 

您將需要一個JSON庫(例如傑克遜)使用解析JSON

2

讀寫JSON數據傑克遜API如下:

publicvoid doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException{ 
// This will store all received articles 
List<Article> articles = new LinkedList<Article>(); 
if (request.getParameter("loadProds") != null) { 
    // 1. get received JSON data from request 
    BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream())); 
    String json = ""; 
    if(br != null){ 
     json = br.readLine(); 
    } 

    // 2. initiate jackson mapper 
    ObjectMapper mapper = new ObjectMapper(); 

    // 3. Convert received JSON to Article 
    Article article = mapper.readValue(json, Article.class); 

    // 4. Set response type to JSON 
    response.setContentType("application/json");    

    // 5. Add article to List<Article> 
    articles.add(article); 

    // 6. Send List<Article> as JSON to client 
    mapper.writeValue(response.getOutputStream(), articles); 
    } 
} 
+0

資料來源:http://hmkcode.com/java-servlet-send-receive-json-using-jquery-ajax/ – ruhong