PDA

Ver la Versión Completa : Leer fichero JSON


Zaitung
17/02/14, 12:59:32
Tengo una app que se descarga un fichero en formato JSON de una pagina web, una vez que lo tengo le voy extrayendo los campos que necesito, de la siguiente manera:

try {
HttpClient httpclient = new DefaultHttpClient();
HttpResponse httpResponse = httpclient.execute(new HttpGet(URL));
inputStream = httpResponse.getEntity().getContent();

if(inputStream != null){
result = convertInputStreamToString(inputStream);
}
else
result = "Did not work!";
} catch (IOException ex) {
ex.printStackTrace();
}

JSSONObject jsonObj = new JSONObject(result);

File= jsonObj.getJSONArray("resources");

for (int i = 0; i < File.length(); i++) {
JSONObject c = File.getJSONObject(i);
variable1= c.getDouble("TAG");
}

Sin embargo ese fichero tiene una gran cantidad de registros y a veces llega a tardar varios minutos.
No se si hay alguna manera de leerlo mas rápido o si en otro formato aceleraría la búsqueda (tengo disponibles RDF/XML, HTML, JSON, N3, XML, TURTLE, CSV, ATOM, JSONLD)

:gracias::gracias:

kriogeN
17/02/14, 13:16:21
¿Cuánto es una gran cantidad? ¿100? ¿200? ¿1.000.000? Con 100 o 200 no debería tardar mucho, con 1.000.000 si puede tardar tiempo, aunque tanto como varios minutos me parece excesivo. Además, ¿Qué es lo que tarda? ¿Sólo la deserialización o incluyes el tiempo de descarga? Si el JSON ocupa mucho y estás en 2G también hay que tenerlo en cuenta.

Precisamente la ventaja del JSON frente a otros formatos como el XML o el HTML es que ocupa bastante menos. El más ligero de todos es el CSV, pero también es el más difícil de entender viendo el fichero. Y tampoco vas a ahorrar mucho.

Y para trabajar con JSON te recomiendo la librería GSON de Google. Te hace por detrás todo el trabajo de la deserialización, y lo único que tienes que hacer es crear objetos con los nombres que vienen en el JSON.

Zaitung
17/02/14, 14:00:37
Muchas gracias probaré con la librería GSON :-)

kriogeN
17/02/14, 21:28:16
La librería GSON no va a hacer que vaya más rápido, lo único que hace es hacer por detrás el proceso de deserialización que haces en el For, pero de una forma más limpia y escalable. Tan escalable que si añades campos nuevos en el JSON lo único que tendrás que hacer es añadirlos a la clase que quieres deserializar y GSON te hará todo el trabajo.

Zaitung
18/02/14, 10:20:35
He estado mirando y veo que el fichero se baja en segundos (ocupa 400 Kb) sin embargo tarda 1 minuto en crear el JSON Object a partir del fichero, he estado buscando información sobre la librería GSON y la verdad es que como no tengo mucha idea se me hace un poco cuesta arriba. Si hay alguien que sepa de algún tutorial me vendría muy bien gracias =)

jtsamper
18/02/14, 11:36:14
Pero tienes que mostrar todos a la vez?? o lo guardas hasta que lo necesitas??? Siempre tiene que ser descargado??

Zaitung
18/02/14, 12:42:13
Al final he resuelto el problema de una manera mas sencilla y que desconocía, uso una petición PHP para filtrar los resultados y asi evito descargarme todo el fichero, y luego filtrar los que necesito. Sin embargo el problema viene que cuando defino la URL, parece que no puede contenter "\:" algo que me es necesario.

private String URL = URL + "&query=(tag\:";

Error : Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )

¿Alguna idea?

:gracias::gracias::gracias:

kriogeN
18/02/14, 13:49:38
Prueba con \\:

Zaitung
18/02/14, 14:19:33
Al final resolví el problema, por si alguien le pasa utilicé un equivalente, para el slash es %2F y para el contaraio, el que yo necesitaba es %5C