2014-10-14 15 views
8

Il mio codice invia una richiesta GET a un server,Conversione BufferedReader a JSONObject o mappa

URL obj = new URL(url); 
    HttpURLConnection con = (HttpURLConnection) obj.openConnection(); 
    con.setRequestMethod("GET"); 
    con.setRequestProperty("User-Agent", USER_AGENT); 
    BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); 

ottengo un oggetto BufferedReader che stampa,

{ 
    "status": "ERROR",  
    "errorCode": "MISSING_PARAMS",  
    "errorMessage": null,  
    "requestId": "20141014181739_11625805172",  
    "downstreamModuleErrorCode": null,  
    "object": [   
    "activity_code",   
    "activity_name", 
    "points", 
    "frequency", 
    "strategy", 
    "vsa_app_access_token"  
    ] 
} 

voglio ottenere un JsonObject o di una mappa da questa. Ho provato a convertire questo in una stringa e manipolarlo. Ma non è così facile da fare. Per favore aiuto.

+0

controllare la mia risposta. È spiegato e funzionante. –

+0

Ho usato questa llibrary, http://docs.oracle.com/javaee/7/api/javax/json/ puoi fare così: JsonReader jsonReader = Json.createReader (new StringReader (in.toString())); JsonObject jsonObj = jsonReader.readObject(); –

+0

librerie javaee in un progetto java se? prova a utilizzare una libreria adeguata che soddisfi le tue esigenze come quella che ho scritto sopra –

risposta

15

Prima farlo come stringa. è possibile utilizzare librarys personalizzati per che, come

String message = org.apache.commons.io.IOUtils.toString(rd); 

o uno StringBuilder

StringBuilder sb = new StringBuilder(); 

    String line; 
    br = new BufferedReader(new InputStreamReader(is)); 
    while ((line = br.readLine()) != null) { 
     sb.append(line); 
    } 

Quindi è possibile analizzarlo. Poiché si tratta di un oggetto a causa del "{" (l'array inizia e termina con []) è necessario creare un oggetto JSONObject.

JSONObject json = new JSONObject(sb.toString()); 

allora si può accedere ai elementi con

//{ "status": "ERROR", "errorCode": "MISSING_PARAMS", "errorMessage": null, "requestId": "20141014181739_11625805172", "downstreamModuleErrorCode": null, "object": [ "activity_code", "activity_name", "points", "frequency", "strategy", "vsa_app_access_token" ]} 

json.getString("status"); 

o l'array con

JSONArray jsonArray = new JSONArray(json.getString("object")); 

oppure utilizzare il metodo getJSONArray()

JSONArray jsonArray = json.getJSONArray("object"); 
+0

Viene visualizzato un messaggio di errore: Il costruttore JSONObject (String) non è definito –

+1

È necessario org.json. Scaricalo con maven http://mvnrepository.com/artifact/org.json/json o scarica la libreria/codice di github. https://github.com/douglascrockford/JSON-java –

0

Usando questo lib (org.json) è possibile convertire stringhe JSON oggetti: http://www.json.org/java/

JSONObject jsonObj = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}"); 
1
InputStream inputStream = connection.getInputStream(); 

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); 
    StringBuilder builder = new StringBuilder(); 
    String line; 
    while ((line = bufferedReader.readLine()) != null) { 
     builder.append(line + "\n"); 
     } 

JSONArray jsonArray = new JSONArray(builder.toString()); 
for (int i = 0; i < jsonArray.length(); i++) { 
    JSONObject json = jsonArray.getJSONObject(i); 

    if (!json.get("object").equals(null)) { 
     JSONArray objectJsonArray = json.getJSONArray("object"); 
      for (int i = 0; i < objectJsonArray.length(); i++) { 
       JSONObject json = objectJsonArray.getJSONObject(i);  
      }  
    } 
} 

Spero che aiuti.

+0

perché copi e incolli un codice che non si adatta alla soluzione? –