2010-01-09 25 views
7

Me gustaría saber cómo analizar un feed JSON por elementos (por ejemplo, url/título/descripción para cada elemento). He echado un vistazo al doc/api, pero no me ha ayudado.Analizando Json Feeds con google Gson

Esto es lo que tengo hasta ahora

import com.google.gson.Gson; 
import com.google.gson.JsonObject; 

public class ImportSources extends Job { 
    public void doJob() throws IOException { 
     String json = stringOfUrl("http://feed.test/all.json"); 
     JsonObject jobj = new Gson().fromJson(json, JsonObject.class); 
     Logger.info(jobj.get("responseData").toString()); 
    } 
    public static String stringOfUrl(String addr) throws IOException { 
     ByteArrayOutputStream output = new ByteArrayOutputStream(); 
     URL url = new URL(addr); 
     IOUtils.copy(url.openStream(), output); 
     return output.toString(); 
    } 
} 

Respuesta

9

depende del formato JSON real. De hecho, puede crear una clase Javabean personalizada que coincida con el formato JSON. Todos los campos en JSON se pueden mapear como String, Integer, Boolean, etc. Propiedades de Javabean. Cualquier conjunto se puede mapear como propiedades List. Cualquier objeto se puede mapear como otra propiedad Javabean anidada. Facilita mucho más procesamiento en Java.

Sin un ejemplo de cadena JSON de su lado, solo está adivinando cómo se vería, así que no puedo dar un ejemplo básico aquí. Pero he publicado respuestas similares antes de que aquí, puede que le resulte útil:

Gson tiene también un User Guide, puede que le resulte útil también.

+0

Gracias por su respuesta, he tratado de aplicar los ejemplos para la siguiente alimentación: http://www.stocktwits.com/ streams/all.json No logré obtener ningún otro valor que nulo. ¿Necesito crear dos grupos: transmisión y tweets? – Roch

0

No sé si GSON puede hacer streaming/enlace incremental (pensé que no).

¿Pero hay alguna razón específica para considerar solo esa biblioteca en particular? Otras bibliotecas de procesamiento Java JSON permiten tal procesamiento (puede consultar los enlaces que tiene la otra respuesta para algunas ideas), ya que es una característica bastante importante cuando se procesan grandes fuentes.

+0

Bueno, estaba usando ROME para fuentes RSS, y el framework que estoy usando contiene gson, por eso estoy tratando de usarlo, pero estoy abierto a cualquier otra biblioteca. – Roch

+0

Ok. Como dije, creo que GSON solo enlaza todo el documento, pero no soy 100%. Para una alternativa, Jackson (http://jackson.codehaus.org) permite el enlace incremental, así como otros múltiples modos de funcionamiento. La forma en que funciona es que necesita obtener un JsonParser para lo principal, iterar sobre la matriz o el objeto JSON principal, y llamar a parser.readValueAs() para el enlace real. La lista de correo del usuario puede ayudar con los detalles, si la documentación no tiene suficientes punteros. – StaxMan

3

Gson 1.4 tiene una nueva API JsonStreamParser que le permite analizar múltiples objetos JSON uno por uno desde una secuencia.

Cuestiones relacionadas