web-dev-qa-db-fra.com

READ JSON String in servlet

Je poste un jQuery AJAX POST sur un servlet et les données sont sous la forme de chaîne JSON. dans un objet de session et les stocker. J'ai essayé d'utiliser la classe JSONObject mais je ne parviens pas à l'obtenir.

Heres l'extrait de code

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

Côté 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
     }
}
20
sv1

Vous n'êtes pas en train d'analyser le 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
}
15
Robby Pond

si vous utilisez jQuery .ajax (), vous devez lire le flux d'entrée de la requête HTTP

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

Alors voici mon exemple. J'ai utilisé json.JSONTokener pour tokenize ma chaîne. (API Json-Java à partir d'ici 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  );
}

Sortie:
âge -> 21 ans
nom -> abc

2
kensen john

Si vous voulez juste le rassembler dans une carte, essayez Jackson .

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