I am posting a jQuery AJAX POST to a servlet and the data is in the form of JSON String. Its getting posted successfully but on the Servlet side I need to read these key-val
If you just want to marshal it into a Map then try Jackson.
ObjectMapper mapper = new ObjectMapper();
...
Map<String, Object> data = mapper.readValue(request.getParameter("mydata"), Map.class);
So here goes my example. I used json.JSONTokener to tokenize my String. ( Json-Java API from here https://github.com/douglascrockford/JSON-java )
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 );
}
Output:
age-->21
name-->abc
You aren't actually parsing the 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
}
if you use jQuery .ajax(), you need to read the HttpRequest input stream
StringBuilder sb = new StringBuilder();
BufferedReader br = request.getReader();
String str;
while( (str = br.readLine()) != null ){
sb.append(str);
}
JSONObject jObj = new JSONObject(sb.toString());