2010-08-05 30 views
12

¿Cómo puedo obtener un JSONObject desde un HttpServletRequest en servlets?Obteniendo JSONObject de la Cadena

+2

¿Ha buscado, leído, intentado algo? – BoltClock

+5

¿qué 'JSONObject'? – Bozho

+0

@Bozho tiene un buen punto. Hay varias bibliotecas JSON para Java, y espero que muchas de ellas usen ese nombre de clase. –

Respuesta

17

muy simple:

JSONObject o = new JSONObject(request.getParameter("WHATEVER")); 

Editar: Puesto que se utiliza JSON, es

JSONObject o = (JSONObject) JSONSerializer.toJSON(request.getParameter("WHATEVER")); 

para usted.

+3

JSONObject no tiene ningún constructor con el argumento String que API está utilizando ?? –

+0

Estoy usando la biblioteca JSON de json.org. –

0

GSON es una biblioteca JSON bastante buena basada en Java.

+0

GSON es bueno, bueno, bueno –

1

Ver JSONObject(java.lang.String). Esto creará un objeto JSONObject si pasa una Cadena que es JSON válida. El constructor arroja un JSONException, por lo que tendrá que manejar eso. Esto es igual de bien si está enviando JSON no válido.

Realmente depende de lo que esté haciendo. En su mayor parte, JSONObject usará bean getters para crear su objeto JSON (si pasa un bean al constructor). De lo contrario, puede pasar un objeto junto con una matriz de nombres de cadena. Aquí, JSONObject usará la reflexión para descubrir los miembros públicos del objeto. Luego usará los nombres que proporcione como las claves de este objeto.

JSONObject se encargará de cualquier cosa del tipo Map sin problemas. Pero si su objeto es List, necesita usar JSONArray. Otro problema es si su Map contiene un List. Entonces, por algún motivo, JSONObject no puede deducir que es un List y utilizará la representación de cadena estándar del List (no es lo que desea). La única manera de manejar eso es iterar sobre el Map y construir el JSONObject manualmente.

Por lo que respecta a su pregunta, supongo que tiene un servlet que tiene una acción que devolverá JSON. En ese caso, cree un nuevo JSONObject y use PrintWriter y jsonObject.toString() para generar su JSON.

0

Lo estás haciendo un poco el manera difícil. Sin duda hay una manera más fácil de hacer esto. Simplemente envíe como parámetros de solicitud normales, no como JSON. Puede usar jQuery.serialize() para reunir todos los campos de formulario como parámetros. He aquí un ejemplo puntapié inicial de cómo el JSP debe verse como:

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <title>Test</title> 
     <script src="http://code.jquery.com/jquery-latest.min.js"></script> 
     <script> 
      $(document).ready(function() { 
       $('#form').submit(function() { 
        $form = $(this); 
        $.post($form.attr('action'), $form.serialize(), function(response) { 
         alert(response); // "OK" 
        }); 
        return false; 
       });   
      }); 
     </script> 
    </head> 
    <body> 
     <form id="form" action="register" method="post"> 
      <input type="text" name="username"> 
      <input type="password" name="password"> 
      <input type="submit"> 
     </form> 
    </body> 
</html> 

Y aquí es cómo el servlet que escucha en un url-pattern de /register/* puede verse como:

@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    String username = request.getParameter("username"); 
    String password = request.getParameter("password"); 
    System.out.println(username + "," + password); 
    response.getWriter().write("OK"); // You can write JSON string here. 
} 

Con el plugin jQuery form que va ser más transparente.

  $(document).ready(function() { 
       $('#form').ajaxForm(function(response) { 
        alert(response); // "OK" 
       });   
      }); 

Para responder de nuevo a partir de servlet para jQuery, es más fácil si devuelve los datos reales JSON.Por ejemplo:

Map<String, Object> data = new HashMap<String, Object>(); 
if (userDAO.exist(username)) { 
    data.put("success", false); 
    data.put("message", "Username in use, please choose another"); 
} else { 
    userDAO.create(username, password); 
    data.put("success", true); 
    data.put("message", "User successfully registered"); 
} 
response.setContentType("application/json"); 
response.getWriter().write(new Gson().toJson(data)); // Gson = Google Gson. 

y luego en jQuery:

 $(document).ready(function() { 
      $('#form').ajaxForm(function(data) { 
       $('#message').addClass(data.success ? 'success' : 'error').text(data.message).show(); 
      });   
     }); 
+1

La pregunta no está relacionada con jQuery ni JavaScript en absoluto, esta respuesta es OT. –

2

Parece que usted debe utilizar la versión de net.sf.json.JSONObject JSONObject (esta no es la versión json.org).

Para la versión net.sf.json.JSONObject sólo tiene que utilizar

JSONObject.fromObject(Object obj) 

donde obj es o bien

  • una cadena con formato JSON válida
  • un POJO de habas con captadores y definidores.
Cuestiones relacionadas