2011-08-16 8 views
5

Sto cercando di trovare una lib/api Java che mi consenta di trasformare il contenuto di un corpo POST richiesta HTTP in un oggetto JSON.Come convertire il corpo della richiesta HTTP nell'oggetto JSON in Java

Idealmente mi piacerebbe utilizzare una libreria Apache Sling (come sono esposti nel mio contenitore in modo naturale).

Il più vicino l'ho trovato: org.apache.sling.commons.json.http che converte l'intestazione in JSON.

HTTP I corpi postali sono nel formato; key1=value1&key2=value2&..&keyn=valueN quindi presumo ci sia qualcosa là fuori, ma non sono riuscito a trovarlo.

Potrebbe essere sufficiente utilizzare un numero personalizzato JSONTokener (org.apache.sling.commons.json.JSONTokener) per eseguire questa operazione se qualcosa non esiste già. Pensieri?

Grazie

risposta

10

Supponendo che si sta utilizzando un HttpServlet e una biblioteca JSON come json-simple si potrebbe fare qualcosa di simile:

public JSONObject requestParamsToJSON(ServletRequest req) { 
    JSONObject jsonObj = new JSONObject(); 
    Map<String,String[]> params = req.getParameterMap(); 
    for (Map.Entry<String,String[]> entry : params.entrySet()) { 
    String v[] = entry.getValue(); 
    Object o = (v.length == 1) ? v[0] : v; 
    jsonObj.put(entry.getKey(), o); 
    } 
    return jsonObj; 
} 

Con esempio di utilizzo:

public void doPost(HttpServletRequest req, HttpServletResponse res) { 
    JSONObject jsonObj = requestParamsToJSON(req); 
    // Now "jsonObj" is populated with the request parameters. 
    // e.g. {"key1":"value1", "key2":["value2a", "value2b"], ...} 
} 
+3

risulta che è possibile eseguire: JSONObject json = new JSONObject (slingHttpServletRequest.getParameterMap()); pure - il tuo metodo dà un po 'più di controllo su ciò che è permesso nell'oggetto json (come l'introduzione di una lista bianca/nera) - che è bello. – empire29

+0

Ciao, ho scaricato la libreria JSON dal link che hai fornito sopra. Come posso usarlo ora. puoi per favore menzionarlo ?? –

+0

@ empire29: ulteriori informazioni su di esso sono molto apprezzabili. –

1

Mi raccomando di provare Apache Commons Beanutils.

ServeltRequest request; 

Map map = request.getParameterMap(); 
MyObject object = new MyObject(); 
BeanUtils.populate(object, map); 
String json = object.toJSON() //using any JSON library 
0

Utilizzare Gson. Con questo puoi creare una classe con variabili private che rappresentano i dati che vuoi: per esempio.

meta:{ 
     name:"Example" 
     firstname:"Example2" 
    } 
data:[ 
     { 
     title:"ecaetra" 
     description:"qwerty" 
     } 
     ... 
    ] 

JSON oggetto potrebbe essere recuperare in questo modo:

public class RetrieveData { 

     private Meta meta; 
     private List<Data> data; 

     public Meta getMeta(){ 
      return meta; 
     } 

     public List<Data> getData(){ 
      return data; 
     } 
} 

public class Meta { 

     private String name; 
     private String firstname; 

     public String getName(){ 
      return name; 
     } 

     public String getFirstName(){ 
      return firstname; 
     } 

} 

public class Data { 

     private String title; 
     private String description; 

     public String getTitle(){ 
      return title; 
     } 

     public String getDescription(){ 
      return description; 
     } 

} 

E la vostra istruzione sono semplici. Il contenuto è il contenuto della tua pagina, puoi recuperarlo con Asynctask.

Object o = new Gson().fromJson(Content, RetrieveData.class); 
data = (RetrieveData)o; 
// Get Meta 
    data.getName(); // Example 
    data.getFirstName(); // Example2 
// Get Data 
    data.get(0).getTitle(); // position 0 : ecaetra 
    data.get(0).getDescription(); // position 0 : qwerty 
Problemi correlati