2011-03-17 70 views
20

我正在發佈一個jQuery AJAX POST到一個servlet並且數據是JSON字符串的形式。 它成功發佈,但在Servlet端,我需要將這些key-val對讀入會話對象並存儲它們。我嘗試使用JSONObject類,但我無法得到它。在servlet中讀取JSON字符串

繼承人的代碼片斷

$(function(){ 
    $.ajax(
    { 
     data: mydata, //mydata={"name":"abc","age":"21"} 
     method:POST, 
     url: ../MyServlet, 
     success: function(response){alert(response); 
    } 
}); 

Servlet的側

public doPost(HTTPServletRequest req, HTTPServletResponse res) 
{ 
    HTTPSession session = new Session(false); 
    JSONObject jObj = new JSONObject(); 
    JSONObject newObj = jObj.getJSONObject(request.getParameter("mydata")); 
    Enumeration eNames = newObj.keys(); //gets all the keys 

    while(eNames.hasNextElement()) 
    { 
     // Here I need to retrieve the values of the JSON string 
     // and add it to the session 
    } 
} 
+0

爲什麼不創建一個JavaScript對象mydata,其中包含mydata.name,mydata.age?那麼你可以只是拉你的servlet的具體參數,而不是解碼json? – dmcnelis 2011-03-17 12:30:23

+0

我不能'因爲key-val可以從POST到另一個不同 – sv1 2011-03-17 12:37:52

+0

你可以在你的函數中使用JQuery解碼json時,fwiw。不是說應該是你的解決方案,但它會完成同樣的事情。 – dmcnelis 2011-03-17 12:46:51

回答

14

你實際上並沒有解析json。

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

while(it.hasNext()) 
{ 
    String key = it.next(); // get key 
    Object o = jObj.get(key); // get value 
    session.putValue(key, o); // store in session 
} 
0

如果你只是想將它封送成地圖,然後嘗試Jackson

ObjectMapper mapper = new ObjectMapper(); 
... 
Map<String, Object> data = mapper.readValue(request.getParameter("mydata"), Map.class); 
2

所以這裏是我的例子。我用json.JSONTokener來標記我的字符串。 (從這裏https://github.com/douglascrockford/JSON-java JSON-的Java API)

String sJsonString = "{\"name\":\"abc\",\"age\":\"21\"}"; 
// Using JSONTokener to tokenize the String. This will create json Object or json Array 
// depending on the type cast. 
json.JSONObject jsonObject = (json.JSONObject) new json.JSONTokener(sJsonString).nextValue(); 

Iterator iterKey = jsonObject.keys(); // create the iterator for the json object. 
while(iterKey.hasNext()) { 
    String jsonKey = (String)iterKey.next(); //retrieve every key ex: name, age 
    String jsonValue = jsonObject.getString(jsonKey); //use key to retrieve value from 

    //This is a json object and will display the key value pair. 

    System.out.println(jsonKey + " --> " + jsonValue ); 
} 

輸出:
年齡 - > 21
名稱 - > ABC

如果使用
17

jQuery的阿賈克斯(),您需要讀HttpRequest輸入流

StringBuilder sb = new StringBuilder(); 
    BufferedReader br = request.getReader(); 
    String str; 
    while((str = br.readLine()) != null){ 
     sb.append(str); 
    }  
    JSONObject jObj = new JSONObject(sb.toString());