LEER cadena JSON en servlet

Estoy publicando una POST jQuery AJAX en un servlet y los datos están en forma de cadena JSON. Está siendo publicado con éxito pero en el lado del Servlet necesito leer estos pares clave-valor en un objeto de sesión y almacenarlos. Intenté usar la clase JSONObject pero no puedo obtenerla.

Aquí está el fragmento de código

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

En el lado de 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 } } 

En realidad no estás analizando el 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 } 

si usa jQuery .ajax (), debe leer la secuencia de entrada 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()); 

Así que aquí va mi ejemplo. Usé json.JSONTokener para tokenizar mi Cadena. (API Json-Java desde aquí 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 ); } 

Salida:
edad -> 21
nombre -> abc

Si solo desea ordenarlo en un Mapa, intente con Jackson .

 ObjectMapper mapper = new ObjectMapper(); ... Map data = mapper.readValue(request.getParameter("mydata"), Map.class);