2012-07-16 18 views
5

Soy nuevo en JSON y REST. Estoy trabajando con un servidor que devuelve cadenas como éstas:REST y JSON - cadena de conversión a matriz JSON

[{"username":"Hello","email":"[email protected]","credits":"100","twitter_username":""},{"username":"Goodbye","email":"[email protected]","credits":"0","twitter_username":""}] 

He conseguido imprimirlos como cadenas en la consola, pero ahora quiero para convertirlos en una matriz JSON. El código que tengo hasta ahora no devuelve ningún error, pero no sé qué poner en el constructor para la nueva matriz JSON. Me he estado refiriendo a un código que me envió un colega, en el que el constructor era JSONArray (respuesta) nuevo, pero nunca me dijo qué era 'respuesta'.

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 

import net.sf.json.JSONArray; 
import net.sf.json.JSONObject; 

import sun.misc.BASE64Encoder; 

public class NetClientGet { 

    public static void main(String[] args) { 

     try { 

     URL url = new URL("http://username:[email protected]/index.php/api/users/get_users/"); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setRequestMethod("GET"); 

     BASE64Encoder enc = new sun.misc.BASE64Encoder(); 
     String userpassword = "username:password"; 
     String encoded = enc.encode(userpassword.getBytes()); 
     conn.setRequestProperty("Authorization", "Basic " + encoded); 

     if (conn.getResponseCode() != 200) { 
      throw new RuntimeException("Failed : HTTP error code : " 
        + conn.getResponseCode()); 
     } 

     BufferedReader br = new BufferedReader(new InputStreamReader(
      (conn.getInputStream()))); 

     String output; 
     System.out.println("Output from Server .... \n"); 
     while ((output = br.readLine()) != null) { 
      System.out.println(output); 
     } 

     JSONArray array = new JSONArray(output); 

     for (int i =0; i < array.size(); i++) { 
      JSONObject row = array.getJSONObject(i); 
      String user = row.getString("username"); 
      System.out.println(user); 
     } 

     conn.disconnect(); 

     } catch (MalformedURLException e) { 

     e.printStackTrace(); 

     } catch (IOException e) { 

     e.printStackTrace(); 

     } 

    } 
} 

Respuesta

11
  • GSON uso para dar formato a la cadena como JSONArray
  • luego atravesar el JSONArray para obtener los valores

el ejemplo de código

String json = "[{\"username\":\"Hello\",\"email\":\"[email protected]\",\"credits\":\"100\",\"twitter_username\":\"\"},{\"username\":\"Goodbye\",\"email\":\"[email protected]\",\"credits\":\"0\",\"twitter_username\":\"\"}]"; 
JsonArray jArray = new JsonParser().parse(json).getAsJsonArray(); 
for (int i=0;i<jArray.size();i++) { 
    JsonObject jsonObject = jArray.get(i).getAsJsonObject(); 
    System.out.println(jsonObject.get("username")); 
    System.out.println(jsonObject.get("email")); 
    System.out.println(jsonObject.get("credits")); 
    System.out.println(jsonObject.get("twitter_username")); 
    System.out.println("*********"); 
} 
+0

Gracias! Funciona como un amuleto – Tiffany

+0

Aunque tengo una pregunta: ¿hay alguna manera de obtener la cadena json sin tener que codificarla así? – Tiffany

+1

pruebe la función getJson en la muestra del código que di como respuesta, en la siguiente publicación: http://stackoverflow.com/questions/11471884/need-help-android-json-currency-converter/11472677#11472677. Usando eso, puedes descargar datos json de servidores externos – sunil

1

Estoy usando la biblioteca gson para manipular json. Puede descargar gson en here. Es una muy buena biblioteca para manejar json. Crear analizador JSON primero, será analizar la cadena JSON:

JsonParser parser = new JsonParser(); 

ahora inicializar una matriz JSON vacío

JsonArray jArray = new JsonArray(); 

Ahora usa el analizador para crear matriz JSON

jArray = parser.parse(outputString).getAsJsonArray(); 
0

tengo Usé org.json.simple.JSONObject y org.json.simple.JSONArray, y espero que net.sf.json.JSONArray también funcione igual.

se debería poner siguiente formato de cadena para la producción (JSONArray Array = new JSONArray (salida);)

{"YOUR_ARRAY_NAME": [{"username":"Hello","email":"[email protected]","credits":"100","twitter_username":""},{"username":"Goodbye","email":"[email protected]","credits":"0","twitter_username":""}]} 

Ahora bien, esto es una representación de cadena de JSONArray.