Snippets de código

Procesando un JSON

Para poder procesar correctamente un archivo en formato JSON puede utilizar la librería GSON la cual puede descargar del siguiente link. A continuación encontrará un ejemplo de como procesar un Stream de JSON usando GSON.

 import java.io.IOException;
 import java.io.StringReader;
 import java.net.MalformedURLException;
 import com.google.gson.stream.JsonReader;
 import com.google.gson.stream.JsonToken;
 
public class ProcessJSON 
{
public static void main(String[] args) throws MalformedURLException, IOException
  {		
       JsonReader reader = new JsonReader(new StringReader("[{\"atributo\":\"valor\", \"lista\":[{\"item\":\"item1\"}]}]"));
	handleArray(reader); // En este caso porque sabemos que siempre nos va a llegar una lista de objetos
  }
      
/**
Cuando identifica que encontró un objeto se procesa los atributos atómicos y compuestos (como listas)
* @param reader
* @throws IOException
*/
private static void handleObject(JsonReader reader) throws IOException
  {
      reader.beginObject();
      while (reader.hasNext()) {
         JsonToken token = reader.peek();
            if (token.equals(JsonToken.BEGIN_ARRAY))
                handleArray(reader);
            else if (token.equals(JsonToken.END_OBJECT)) {
                reader.endObject();
                return;
            } else
                handleNonArrayToken(reader, token);
      }
   }
/** 
Cuando detecta que hay un arreglo es llamado este método * Los arreglos pueden contener objetos o elementos primitivos * * @param reader * @throws IOException 
*/ 

public static void handleArray(JsonReader reader) throws IOException 
 { 
      reader.beginArray(); 
      while (true) { 
         JsonToken token = reader.peek(); 
            if (token.equals(JsonToken.END_ARRAY)) { 
                reader.endArray(); break;  
            } else if (token.equals(JsonToken.BEGIN_OBJECT)) { 
                 handleObject(reader); 
            } else if (token.equals(JsonToken.END_OBJECT)) { 
                 reader.endObject(); 
            } else handleNonArrayToken(reader, token); 
      } 
} 

/**
Cuando identificó que no son ni arreglos ni objetos sino tokens (primitivas) concretos
@param reader
@param token
@throws IOException
*/

public static void handleNonArrayToken(JsonReader reader, JsonToken token) throws IOException
  {
      if (token.equals(JsonToken.NAME))
          System.out.println(reader.nextName());
      else if (token.equals(JsonToken.STRING))
          System.out.println(reader.nextString());
      else if (token.equals(JsonToken.NUMBER))
          System.out.println(reader.nextDouble());
      else if (token.equals(JsonToken.BOOLEAN))
          System.out.println(reader.nextBoolean());
      else
          reader.skipValue();
  }
}