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();
}
}