2010-08-05 11 views
12

Come posso ottenere un JSONObject da un HttpServletRequest in servlet?Come ottenere JSONObject da String

+2

Hai cercato, letto, provato qualcosa? – BoltClock

+5

cosa 'JSONObject'? – Bozho

+0

@Bozho ha un buon punto. Ci sono un certo numero di librerie JSON per Java, e mi aspetto che molti di loro usino quel nome di classe. –

risposta

17

Molto semplice:

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

Edit: Dal momento che si utilizza JSON-lib, è

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

per voi.

+3

JSONObject non ha alcun costruttore con argomento String quale API si sta utilizzando ?? –

+0

Sto usando la libreria JSON da json.org. –

0

GSON è una discreta libreria JSON basata su Java.

+0

GSON è buono davvero buona lib –

1

Vedere JSONObject(java.lang.String). Questo creerà un oggetto JSONObject se passi una stringa che è JSON valida. Il costruttore lancia un JSONException quindi dovrai gestirlo. Questo è altrettanto valido se invii JSON non valido.

Dipende davvero da quello che stai facendo. Per la maggior parte, JSONObject utilizzerà i getter di bean per creare il tuo oggetto JSON (se passi un bean al costruttore). Altrimenti puoi passare un oggetto insieme a un array di stringhe di nomi. Qui, JSONObject utilizzerà la riflessione per capire i membri pubblici dell'oggetto. Utilizzerà quindi i nomi forniti come chiavi per questo oggetto.

JSONObject gestirà qualsiasi tipo di tipo Map senza problemi. Ma se il tuo oggetto è un List, devi usare JSONArray. Un altro problema è se il tuo Map contiene un List. Quindi, per qualche motivo, JSONObject non è in grado di capire che si tratta di un List e utilizzerà la rappresentazione String standard dello (non quello che si desidera). L'unico modo per gestirlo è iterare su Map e creare manualmente il JSONObject.

Per quanto riguarda la tua domanda, presumo che tu abbia un servlet con un'azione che restituirà JSON. In tal caso, creare un nuovo JSONObject e utilizzare PrintWriter e jsonObject.toString() per emettere il proprio JSON.

0

Lo stai facendo un po 'il modo . C'è sicuramente un modo più semplice per farlo. Invia come parametri di richiesta normali, non come JSON. È possibile utilizzare jQuery.serialize() per raccogliere tutti i campi modulo come parametri. Ecco un esempio calcio d'inizio di come la JSP dovrebbe essere simile:

<!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> 

Ed ecco come il servlet in ascolto su un url-pattern di /register/* può apparire come:

@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 il plugin jQuery form Sarà essere più trasparenti.

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

Per rispondere indietro dalla servlet a jQuery, è più facile se si torna dati reali JSON.Per esempio:

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. 

e poi in jQuery:

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

La domanda non è correlata a jQuery né JavaScript, questa risposta è OT. –

2

Sembra che è necessario utilizzare la versione di net.sf.json.JSONObject JSONObject (questa non è la versione json.org).

Per la versione net.sf.json.JSONObject sufficiente utilizzare

JSONObject.fromObject(Object obj) 

dove obj è o

  • una stringa JSON formattato valido
  • un POJO Bean con getter e setter.